Группировка
Для группировки по заданному полю используйте метод groupBy().
$query->groupBy('uid');
Приведенный выше код будет указывать запрос на группировку по полю uid. Обратите внимание, что имя поля здесь должно быть псевдонимом, созданным методами addField() или addExpression(), поэтому в большинстве случаев вы захотите использовать возвращаемое значение из этих методов, чтобы убедиться, что используется правильный псевдоним.
Чтобы получить количество строк, сгруппированных по полю, например, uid, вы можете выполнить следующее:
$query->addExpression('count(uid)', 'uid_node_count');
Чтобы сгруппировать по нескольким полям, просто вызовите groupBy() несколько раз в нужном порядке.
Having
Можно добавить условие для агрегированных значений.
$query->having('COUNT(uid) >= :matches', [':matches' => $limit]);
В этом примере будут найдены случаи, когда число идентификаторов uid больше или равно $limit. Обратите внимание, что первый параметр наличия не фильтруется перед отправкой в базу данных, поэтому пользовательские значения должны передаваться через второй параметр.
Примеры groupBy и having
Следующий код подсчитывает количество узлов на UID:
$query = $connection->select('node', 'n') ->fields('n', ['uid']); $query->addExpression('count(uid)', 'uid_node_count'); $query->groupBy("n.uid"); $query->execute();
Следующий блок кода берет предыдущий пример подсчета узлов на uid и ограничивает результаты uids, которые имеют как минимум 2 записи.
$query = $connection->select('node', 'n') ->fields('n',['uid']); $query->addExpression('count(uid)', 'uid_node_count'); $query->groupBy("n.uid"); $query->having('COUNT(uid) >= :matches', [':matches' => 2]); $results = $query->execute();
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.