Drupal → Подзапросы в 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
Комментарии
разве не проще и быстрее будет джоин с группировкой? уверен что будет быстрее работать чем подзапрос
в данном контексте это не имеет значение
Пост старый, но по запросу в google в на 1ом месте, по этому допишу решение:
собственно структура запроса остается та же, но не
Допустим нужно посчитать ноды для юзера только типа 'page', тогда
Оставить комментарий