logo

Palette - Make it Colorful🎨

Palette - Visual Page Builder, no design degree required.

Live Demo Download Palette

Scroll
01/10/2025, by Ivan

Om te groeperen op een bepaald veld gebruik je de methode groupBy().

$query->groupBy('uid');

Bovenstaande code geeft aan dat de query moet groeperen op het veld uid. Merk op dat de veldnaam hier een alias moet zijn die is aangemaakt met de methoden addField() of addExpression(). In de meeste gevallen wil je daarom de returnwaarde van die methoden gebruiken om zeker te zijn dat de juiste alias wordt gebruikt.

Om het aantal rijen te verkrijgen dat gegroepeerd is op een veld, zoals uid, kun je het volgende uitvoeren:

$query->addExpression('count(uid)', 'uid_node_count');

Om te groeperen op meerdere velden, roep je gewoon meerdere keren groupBy() aan in de gewenste volgorde.

Having

Je kunt een conditie toevoegen voor geaggregeerde waarden.

$query->having('COUNT(uid) >= :matches', [':matches' => $limit]);

In dit voorbeeld worden gevallen gevonden waarbij het aantal uid’s groter of gelijk is aan $limit. Merk op dat de eerste parameter van having() niet gefilterd wordt voordat deze naar de database wordt gestuurd, dus gebruikerswaarden moeten via de tweede parameter worden doorgegeven.

Voorbeelden van groupBy en having

De volgende code telt het aantal nodes per UID:

$query = $connection->select('node', 'n')
  ->fields('n', ['uid']);
$query->addExpression('count(uid)', 'uid_node_count');
$query->groupBy("n.uid");
$query->execute();

Het volgende codeblok neemt het vorige voorbeeld van het tellen van nodes per uid en beperkt de resultaten tot uids die minstens 2 records hebben:

$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();