ホームページ > データベース > mysql チュートリアル > Doctrine クエリ言語を使用してグループごとの最大行または最新行を効率的に見つけるにはどうすればよいですか?

Doctrine クエリ言語を使用してグループごとの最大行または最新行を効率的に見つけるにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-20 19:00:20
オリジナル
917 人が閲覧しました

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

Doctrine クエリ言語: グループごとの最大または最新の行の検索

一部のデータベース操作では、最大または最新の行をクエリする必要があります。データのグループ内の行。このような操作を実行する SQL ステートメントを Doctrine Query Language (DQL) に変換するには、特定の手法を活用する必要があります。

一般的な SQL 手法の 1 つは、サブクエリを使用してグループ内の最高値または最新値を特定し、結合することです。それらの結果を含むメインクエリ。ただし、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート