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