logo

Palette - Make it Colorful🎨

Palette - Visual Page Builder, no design degree required.

Live Demo Download Palette

Scroll
08/05/2020, by maria

Для группировки по заданному полю используйте метод 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();