// Drupal 6
$ ...
+ развернуть текст сохранённая копия
Выборка с условием:
// Drupal 6
$nodes = db_query("
SELECT nid, title FROM {node}
WHERE type = '%s' AND uid = %d
", 'page', 1);
// Drupal 7, static query
$nodes = db_query("
SELECT nid, title FROM {node}
WHERE type = :type AND uid = :uid
", array(':type' => 'page', ':uid' => 1))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'page')
->condition('n.uid', 1)
->execute()
->fetchAll();
Выборка из двух таблиц соединённых с помощью INNER JOIN:
// Drupal 6
$nodes = db_query("
SELECT n.title, u.name FROM {node} n
INNER JOIN {users} u ON n.uid = u.uid
");
// Drupal 7, static query
$nodes = db_query("
SELECT n.title, u.name FROM {node} n
INNER JOIN {users} u ON n.uid = u.uid
")->fetchAll();
// Drupal 7, dynamic query
$query = db_select('node', 'n');
$query->innerJoin('users', 'u', 'n.uid = u.uid');
$query->fields('n', array('title'));
$query->fields('u', array('name'));
$nodes = $query->execute()->fetchAll();
Следует помнить, что некоторые методы (например джоины) не возвращают объект SelectQuery, и поэтому их нельзя использовать в цепочке вызовов вроде db_select()->method1()->innerJoin()->method2()
.
Получить значение поля у единственной записи:
// Drupal 6
$title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", 123));
// Drupal 7, static query
$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => 123))->fetchField();
// Drupal 7, dynamic query
$title = db_select('node', 'n')
->fields('n', array('title'))
->condition('n.nid', 123)
->execute()
->fetchField();
Получить объект по его id:
// Drupal 6
$node = db_fetch_object(db_query("SELECT * FROM {node} WHERE nid = %d", 123));
// Drupal 7, static query
$node = db_query("SELECT * FROM {node} WHERE nid = :nid", array(':nid' => 123))->fetchObject();
// Drupal 7, dynamic query
$node = db_select('node', 'n')
->fields('n')
->condition('n.nid', 123)
->execute()
->fetchObject();
Посчитать число записей:
// Drupal 6
$count = db_result(db_query("SELECT COUNT(*) FROM {node} n WHERE n.uid = 1"));
// Drupal 7, static query
$count = db_query("SELECT COUNT(*) FROM {node} n WHERE n.uid = 1")->fetchField();
// Drupal 7, dynamic query, вариант 1
$count = db_select('node', 'n')
->condition('n.uid', 1)
->countQuery()
->execute()
->fetchField();
// Drupal 7, dynamic query, вариант 2
$query = db_select('node');
$query->addExpression('COUNT(*)');
$count = $query->execute()->fetchField();
Найти минимальное значение:
// Drupal 6
$min = db_result(db_query("SELECT MIN(fieldname) FROM {table}"));
// Drupal 7, static query
$min = db_query("SELECT MIN(fieldname) FROM {table}")->fetchField();
// Drupal 7, dynamic query
$query = db_select('table');
$query->addExpression('MIN(fieldname)');
$min = $query->execute()->fetchField();
Выбрать определённое количество записей:
// Drupal 6
$nodes = db_query("SELECT * FROM {node} LIMIT 0, 10");
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} LIMIT 0, 10")->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->range(0, 10)
->execute()
->fetchAll();
Обойти записи:
// Drupal 6
$nodes = db_query("SELECT * FROM {node}");
while ($node = db_fetch_object($nodes)) {
$items[] = $node->title;
}
// Drupal 7, static query
$result = db_query("SELECT * FROM {node}");
foreach ($result as $node) {
$items[] = $node->title;
}
// Drupal 7, dynamic query
$result = db_select('node', 'n')->fields('n')->execute();
foreach ($result as $node) {
$items[] = $node->title;
}
Обновление записи:
// Drupal 6
db_query("UPDATE {node} SET status = %d WHERE nid = %d", 1, 123);
// Drupal 7, static query
db_query("UPDATE {node} SET status = :status WHERE nid = :nid", array(':status' => 1, ':nid' => 123));
// Drupal 7, dynamic query
db_update('node')
->fields(array('status' => 1))
->condition('nid', 123)
->execute();
Инкремент значения поля:
// Drupal 6
db_query("UPDATE {node_counter} SET totalcount = totalcount + 1 WHERE nid = %d", 123);
// Drupal 7, static query
db_query("UPDATE {node_counter} SET totalcount = totalcount + 1 WHERE nid = :nid", array(':nid' => 123));
// Drupal 7, dynamic query
db_update('node_counter')
->expression('totalcount', 'totalcount + 1')
->condition('nid', 123)
->execute();
Удаление записи:
// Drupal 6
db_query("DELETE FROM {node} WHERE uid = %d AND created < %d", 1, time() - 3600);
// Drupal 7, static query
db_query("DELETE FROM {node} WHERE uid = :uid AND created < :created", array(':uid' => 1, ':created' => time() - 3600));
// Drupal 7, dynamic query
db_delete('node')
->condition('uid', 1)
->condition('created', time() - 3600, '<')
->execute();
Очистка таблицы:
// Drupal 6, Drupal 7 static query
db_query("TRUNCATE {node}");
// Drupal 7, dynamic query
db_truncate('node')->execute();
Добавление записи:
// Drupal 6
db_query("INSERT INTO {mytable} (intvar, stringvar, floatvar) VALUES (%d, '%s', %f)", 5, 'hello world', 3.14);
$id = db_last_insert_id();
// Drupal 7, dynamic query
$id = db_insert('mytable')
->fields(array(
'intvar' => 5,
'stringvar' => 'hello world',
'floatvar' => 3.14,
))
->execute();
Для добавления данных можно по прежнему пользоваться drupal_write_record()
Использование логического оператора OR в условии:
// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE uid = %d OR status = %d", 1, 0);
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE uid = :uid OR status = :status", array(':uid' => 1, ':status' => 0))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->condition(
db_or()
->condition('uid', 1)
->condition('status', 0)
)
->execute()
->fetchAll();
Использование оператора IN в условии:
$nids = array(1, 2, 3);
// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE nid IN (" . db_placeholders($nids) . ")", $nids);
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE nid IN (:nids)", array(':nids' => $nids))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->condition('n.nid', $nids, 'IN')
->execute()
->fetchAll();
Использование оператора LIKE в условии:
// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE title LIKE '%%%s%%'", 'substring');
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE title LIKE :title", array(':title' => '%' . db_like('substring') . '%'))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->condition('n.title', '%' . db_like('substring') . '%', 'LIKE')
->execute()
->fetchAll();
Использование оператора BETWEEN в условии:
// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE nid BETWEEN %d AND %d", 123, 456);
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE nid BETWEEN :nid1 AND :nid2", array(':nid1' => 123, ':nid2' => 456))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->condition('n.nid', array(123, 456), 'BETWEEN')
->execute()
->fetchAll();
Проверка значения на NULL:
// Drupal 6, Drupal 7 static query
$result = db_query("SELECT * FROM {table} WHERE field IS NULL");
// Drupal 7, dynamic query, вариант 1
$result = db_select('table', 't')
->fields('t')
->condition('t.field', NULL, 'IS NULL')
->execute();
// Drupal 7, dynamic query, вариант 2
$result = db_select('table', 't')
->fields('t')
->isNull('t.field')
->execute();
Сложные условия в WHERE:
// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE YEAR(FROM_UNIXTIME(created)) = %d", 2011);
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE YEAR(FROM_UNIXTIME(created)) = :created", array(':created' => 2011))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->where('YEAR(FROM_UNIXTIME(n.created)) = :created', array(':created' => 2011))
->execute()
->fetchAll();
Сортировка:
// Drupal 6
$nodes = db_query("SELECT * FROM {node} ORDER BY created DESC, title ASC");
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} ORDER BY created DESC, title ASC")->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->orderBy('n.created', 'DESC')
->orderBy('n.title', 'ASC')
->execute()
->fetchAll();
Получить результаты запроса в виде двумерного ассоциативного массива:
// Drupal 6
$result = db_query("SELECT nid, title, created FROM {node}");
$nodes = array();
while ($row = db_fetch_object($result)) {
$nodes[$row->nid] = $row;
}
// Drupal 7, static query
$nids = db_query("SELECT nid, title, created FROM {node}")->fetchAllAssoc('nid');
// Drupal 7, dynamic query
$nids = db_select('node', 'n')
->fields('n', array('nid', 'title', 'created'))
->execute()
->fetchAllAssoc('nid');
Получить одну колонку из таблицы в виде простого одномерного массива:
// Drupal 6
$result = db_query("SELECT nid FROM {node}");
$nids = array();
while ($row = db_fetch_object($result)) {
$nids[] = $row->nid;
}
// Drupal 7, static query
$nids = db_query("SELECT nid FROM {node}")->fetchCol();
// Drupal 7, dynamic query
$nids = db_select('node', 'n')
->fields('n', array('nid'))
->execute()
->fetchCol();
Получить одномерный ассоциативный массив, где ключами будет первая колонка запроса, а значениями — вторая:
// Drupal 6
$result = db_query("SELECT nid, title FROM {node}");
$titles = array();
while ($row = db_fetch_object($result)) {
$nids[$row->nid] = $row->title;
}
// Drupal 7, static query
$titles = db_query("SELECT nid, title FROM {node}")->fetchAllKeyed();
// Drupal 7, dynamic query
$titles = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->execute()
->fetchAllKeyed();
Полный мануал с кучей примеров есть на официальном сайте — Database API.
Источник
Тэги: laravel
PHP-Дайджест № 74 – интересные новости, материалы и инструменты (5 – 22 ноября 2015)
2015-11-22 22:37:51
+ развернуть текст сохранённая копия
Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.
Приятного чтения!
Читать дальше →
Тэги: drupal, group, laravel, magento, php, symfony, wordpress, yii, zfort, блог, веб-разработка, дайджест, компании, новости, подборка, ссылки
PHP-Дайджест № 73 – интересные новости, материалы и инструменты (18 октября – 5 ноября 2015)
2015-11-05 20:58:27
+ развернуть текст сохранённая копия
Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.
Приятного чтения!
Читать дальше →
Тэги: codeception, drupal, framework, hhvm, laravel, php, phpixie, phpunit, symfony, yii, zend, веб-разработка, дайджест, новости, подборка, ссылки
PHP-Дайджест № 72 – интересные новости, материалы и инструменты (5 – 18 октября 2015)
2015-10-19 01:18:06
+ развернуть текст сохранённая копия
Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.
Приятного чтения!
Читать дальше →
Тэги: drupal, group, laravel, php, phpunit, symfony, wordpreess, yii, zend, zfort, блог, веб-разработка, дайджест, компании, новости, подборка, ссылки
PHP-Дайджест № 71 – интересные новости, материалы и инструменты (21 сентября – 5 октября 2015)
2015-10-04 23:30:18
+ развернуть текст сохранённая копия
Сегодня у PHP-Дайджеста день рождения! Исполнилось ровно три года с момента публикации первого выпуска на Хабре. Огромное спасибо всем, кто помогал создавать дайджесты, кто присылает ссылки и правки. Спасибо разработчикам за замечательные инструменты и авторам за их полезные статьи. Спасибо всему PHP-сообществу, а главное, спасибо вам за то, что читаете и поддерживаете PHP-Дайджест! Вместе сделаем наш PHP-мир лучше!
Под катом, как всегда, вас ждет подборка со ссылками на новости и материалы.
Приятного чтения!
Читать дальше →
Тэги: group, laravel, php, phpunit, symfony, wordpreess, yii, zfort, блог, веб-разработка, дайджест, компании, новости, подборка, ссылки