如何使用 Doctrine 查詢語言有效地尋找每組的最大或最新行?

Barbara Streisand
發布: 2024-11-20 19:00:20
原創
850 人瀏覽過

How to Efficiently Find the Maximum or Latest Row Per Group Using Doctrine Query Language?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板