Gruppierung
Um nach einem bestimmten Feld zu gruppieren, verwenden Sie die Methode groupBy().
$query->groupBy('uid');
Der obige Code weist die Abfrage an, nach dem Feld uid zu gruppieren. Beachten Sie, dass der Feldname hier ein Alias sein muss, der durch die Methoden addField() oder addExpression() erstellt wurde. In den meisten Fällen möchten Sie daher den Rückgabewert dieser Methoden verwenden, um sicherzustellen, dass der richtige Alias genutzt wird.
Um die Anzahl der nach einem Feld, z. B. uid, gruppierten Zeilen zu erhalten, können Sie Folgendes ausführen:
$query->addExpression('count(uid)', 'uid_node_count');
Um nach mehreren Feldern zu gruppieren, rufen Sie groupBy() einfach mehrmals in der gewünschten Reihenfolge auf.
Having
Sie können eine Bedingung für aggregierte Werte hinzufügen.
$query->having('COUNT(uid) >= :matches', [':matches' => $limit]);
In diesem Beispiel werden Fälle gefunden, bei denen die Anzahl der uid-Werte größer oder gleich $limit ist. Beachten Sie, dass der erste Parameter von having nicht vor dem Senden an die Datenbank gefiltert wird, daher sollten benutzerdefinierte Werte immer über den zweiten Parameter übergeben werden.
Beispiele für groupBy und having
Der folgende Code zählt die Anzahl der Nodes pro UID:
$query = $connection->select('node', 'n') ->fields('n', ['uid']); $query->addExpression('count(uid)', 'uid_node_count'); $query->groupBy("n.uid"); $query->execute();
Der folgende Code erweitert das vorherige Beispiel und begrenzt die Ergebnisse auf UIDs, die mindestens 2 Einträge haben:
$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.