Doctrine Query Language: Finden der maximalen oder neuesten Zeilen pro Gruppe
Bei einigen Datenbankoperationen ist es notwendig, nach dem Maximum oder den neuesten Zeilen abzufragen Zeile innerhalb einer Datengruppe. Um SQL-Anweisungen, die solche Vorgänge ausführen, in Doctrine Query Language (DQL) zu übersetzen, müssen Sie bestimmte Techniken nutzen.
Eine gängige SQL-Technik besteht darin, eine Unterabfrage zu verwenden, um den höchsten oder neuesten Wert innerhalb einer Gruppe zu ermitteln und dann beizutreten die Hauptabfrage mit diesen Ergebnissen. Allerdings kann dieser Ansatz im Hinblick auf die Doktrin komplex werden.
Eine alternative Lösung besteht darin, die SQL-Anweisung neu zu schreiben, um die Verwendung von Aggregatfunktionen zu vermeiden. Um beispielsweise die höchste Punktzahl pro Name zu ermitteln, können Sie die folgende SQL-Anweisung verwenden:
SELECT a.* FROM score a LEFT JOIN score b ON a.name = b.name AND a.score < b.score WHERE b.score IS NULL ORDER BY a.score DESC
Diese Abfrage wählt alle Zeilen aus der Bewertungstabelle aus, in denen für denselben Namen keine höhere Punktzahl aufgezeichnet wurde.
Um die SQL-Anweisung in DQL zu übersetzen, können Sie schreiben:
SELECT a FROM AppBundle\Entity\Score a LEFT JOIN AppBundle\Entity\Score b WITH a.name = b.name AND a.score < b.score WHERE b.score IS NULL ORDER BY a.score DESC
Sie können auch die Abfrage-Builder-API in Doctrine verwenden, um die Abfrage zu erstellen:
$DM = $this->get( 'Doctrine' )->getManager(); $repo = $DM->getRepository( 'AppBundle\Entity\Score' ); $results = $repo->createQueryBuilder( 'a' ) ->select( 'a' ) ->leftJoin( 'AppBundle\Entity\Score', 'b', 'WITH', 'a.name = b.name AND a.score < b.score' ) ->where( 'b.score IS NULL' ) ->orderBy( 'a.score','DESC' ) ->getQuery() ->getResult();
Dies bietet eine effiziente Möglichkeit, denselben Vorgang wie die ursprüngliche SQL-Anweisung mit Doctrine auszuführen.
Das obige ist der detaillierte Inhalt vonWie kann man mithilfe der Doctrine Query Language effizient die maximale oder neueste Zeile pro Gruppe finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!