Xo66uT29 Август 2010MySQL

Хочу написать об очень полезной возможности MySQL, которая очень помогает в рефакторинге старой БД, точнее в переносе данных из старой БД в новую, имеющую другую структуру. В данном случае нам надо вставить в новую таблицу данные, которые мы выбираем из старой.

Давайте создадим для начала две таблицы:

CREATE database testdb;
USE testdb;

CREATE TABLE table1 (id int(10) auto_increment, fname varchar(20), lname(20), primary key(id));
CREATE TABLE table2 (id int(10) auto_increment, firstname varchar(20), lastname(20), age int, primary key(id));

Теперь добавим немного данных в таблицу для работы:

INSERT INTO table2 (firstname, lastname, age)
 VALUES
 ('Ivan', 'Ivanov', 12),
 ('Petr', 'Petrov', 13),
 ('Alex', 'Kuznetsov', 39),
 ('Vladimir', 'Ivanov', 42)

Теперь мы можем внести во вторую таблицу данные из первой отфильтрованные по WHERE, притом обратите внимание вносятся все данные, которые мы выбираем из второй таблицы, то есть запрос INSERT повторяется для каждой строчки из второй таблицы.

INSERT INTO table1 (fname, lname) SELECT firstname, lastname FROM table2 WHERE age <= 39;
 
zend_framework

Не так давно, начал разбираться с Zend Framework, в этом очень помогают скринкасты от Jon Lobenlsold. Документация на офф сайте скудная и раскрывает только частные понятия отдельных классов, которые в принципе итак показываются с помощью той же IntelliSense Eclipse.
Подвигло меня написать этот пост следующее, я не мог понять как лучше коннектиться к базе, возможно мое решение поможет новичкам в ZF, таким же как и я. Я видел решение с созданием Helper‘а, но как выяснилось все намного проще. Как показала практика решение с Helper подходит только тогда, когда коннект к базе происходит из Контроллеров. Я же хочу делать запросы из собственного класса, который лежит у меня в папке /library/App/.
Итак для коннекта к базе необходимо сделать следующее -
Прописать следующие строчки в application.ini (я прописал в секцию production)

resources.db.adapter = "PDO_MYSQL"
resources.db.params.charset = "utf8"
resources.db.params.host = "127.0.0.1"
resources.db.params.username = "root"
resources.db.params.password = "123456"
resources.db.params.dbname = "yourdb"

После этого можно делать запросы из любого класс можно следующим образом.

$dbAdapter = Zend_Db_Table::getDefaultAdapter();
 $result = $dbAdapter->query("SELECT * FROM users")->fetchAll();
 var_dump($result);

В данном случае статический метод getDefaultAdapter возвращает Zend_Db_Adapter_Abstract, то есть тоже самое, что и при создании подключения через factory, а именно:

$config = Zend_Registry::get('config');
$dbAdapter  = Zend_Db::factory($this->config->db->type,
 array('host'     => $config->db->host,
 'username' => $config->db->user,
 'password' => $config->db->pass,
 'dbname'   => $config->db->name
 )
 );

В первом случае настройки автоматически подхватываются из application.ini, во втором же их приходится прописывать вручную.

Буду рад, если кому-нибудь данное открытие поможет как и мне.

 

Преимущество и краткий обзор FlashDevelop я уже делал в одной из предыдущих статей. Несколько сумбурно, но все таки там есть что почитать.

Для начала скачиваем все необходимое:

  1. FlashDevelop. последний на момент написания статьи 3.2.2
  2. Adobe Flex SDK.
  3. Debug Flash Player для вашего барузера.

Если у вас еще не стоит Java 1.6+, то ставим ее, а для пользователей XP нужно сделать апгрейд update .NET 2.0 framework to SP2.

Читать далее…