Подзапросы в Database API семёрки

Пример использование подзапроса в SELECT:

$subquery = db_select('node', 'n');
$subquery->addExpression('COUNT(*)');
$subquery->where('n.uid = u.uid');
 
$query = db_select('users', 'u');
$query->fields('u', array('uid', 'name'));
$query->addExpression('(' . $subquery . ')', 'nodes');
$users = $query->execute();

Код выбирает пользователей и подсчитывает созданные ими ноды. Он равносилен запросу:

$users = db_query("
  SELECT u.uid, u.name, (
    SELECT COUNT(*)
    FROM {node} n
    WHERE n.uid = u.uid
  ) AS nodes
  FROM {users} u
");

Красивее решения пока не нашёл. Единственный замеченный минус — в подзапросе нельзя использовать аргументы:

$subquery->condition('поле', 'аргумент'); // fail
$subquery->addExpression('выражение', 'алиас', 'аргументы'); // fail

Написанное актуально для
Drupal 7
Теги:
работа с бд
Добавлено: 29 Июля 2018 22:19:23 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...