Doctrine 查詢語言:尋找每組的最大或最新行
在某些資料庫操作中,需要查詢最大或最新的行一組資料中的行。若要將執行此類操作的 SQL 語句轉換為 Doctrine Query Language (DQL),您必須利用特定的技術。
一種常見的 SQL 技術是使用子查詢來決定群組內的最高或最新值,然後加入包含這些結果的主查詢。然而,當涉及到 Doctrine 時,這種方法可能會變得複雜。
另一個解決方案是重寫 SQL 語句以避免使用聚合函數。例如,要尋找每個名稱的最高分數,您可以使用以下 SQL 語句:
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
此查詢從分數表中選擇沒有為相同名稱記錄更高分數的所有行。
要將SQL 語句轉換為DQL,您可以寫:
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
您也可以使用Doctrine 中的查詢建構器API 來建構查詢:
$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();
這提供了一種使用Doctrine 執行與原始SQL 語句相同操作的有效方法。
以上是如何使用 Doctrine 查詢語言有效地尋找每組的最大或最新行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!