Подзапросы в 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
Комментарии:
Нету комментариев для вывода...