Grupisanje
Za grupisanje po određenom polju koristite metod groupBy().
$query->groupBy('uid');
Gornji kod će upitu narediti da grupiše po polju uid. Obratite pažnju da ime polja ovde mora biti alias kreiran metodama addField() ili addExpression(), pa ćete u većini slučajeva želeti da koristite vraćenu vrednost tih metoda da biste bili sigurni da je korišćen pravi alias.
Da biste dobili broj redova grupisanih po polju, na primer uid, možete izvršiti sledeće:
$query->addExpression('count(uid)', 'uid_node_count');
Da biste grupisali po više polja, jednostavno pozovite groupBy() više puta redosledom koji želite.
Having
Moguće je dodati uslov na agregirane vrednosti.
$query->having('COUNT(uid) >= :matches', [':matches' => $limit]);
U ovom primeru će biti pronađeni slučajevi gde je broj uid-ova veći ili jednak $limit. Obratite pažnju da prvi parametar having uslova nije filtriran pre slanja bazi, tako da korisničke vrednosti treba prosleđivati preko drugog parametra.
Primeri groupBy i having
Sledeći kod broji broj čvorova po UID-u:
$query = $connection->select('node', 'n') ->fields('n', ['uid']); $query->addExpression('count(uid)', 'uid_node_count'); $query->groupBy("n.uid"); $query->execute();
Sledeći blok koda uzima prethodni primer brojanja čvorova po uid i ograničava rezultate na uid-ove koji imaju najmanje 2 zapisa.
$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.