Rumah > Artikel > pangkalan data > Bagaimana untuk Mendapatkan Baris Maksimum setiap Kumpulan dalam Doktrin DQL dengan Cekap?
Bahasa Pertanyaan Doktrin: Mendapatkan Baris Maksimum atau Terkini bagi setiap Kumpulan
Dalam Bahasa Pertanyaan Doktrin (DQL), mendapatkan semula baris maksimum atau terkini setiap kumpulan boleh dicapai menggunakan subkueri dan cantuman.
Pernyataan Masalah:
Pernyataan SQL asal cuba untuk mendapatkan markah maksimum bagi setiap nama menggunakan cantuman dalaman pada subkueri. Walau bagaimanapun, terjemahan DQL dalam soalan mempamerkan ralat sintaks, menunjukkan bahawa persatuan bernama "nama" tidak wujud dalam entiti "Skor".
Penyelesaian:
Penyelesaian yang dicadangkan mengelakkan penggunaan fungsi agregat dan menumpukan pada penggunaan cantuman untuk mengecualikan baris yang mendapat markah lebih rendah. Pendekatan ini memastikan pertanyaan yang cekap dan menghapuskan keperluan untuk logik atau pengiraan tambahan.
DQL Equivalent:
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
Penjelasan:
Syarat gabungan kiri memastikan bahawa hanya baris dengan skor tertinggi bagi setiap nama disertakan dalam keputusan. Baris dengan skor yang lebih rendah akan ditapis keluar oleh klausa WHERE berikutnya, yang menyemak ketiadaan skor yang lebih tinggi untuk nama yang sama.
Alternatif Pembina Pertanyaan:
Pendekatan ini juga boleh dilaksanakan menggunakan Pembina Pertanyaan:
$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();
Pertimbangan Tambahan:
Pendekatan alternatif melibatkan mewujudkan paparan pangkalan data yang mewakili hasil pertanyaan yang diingini . Pandangan ini kemudiannya boleh dipetakan kepada entiti dalam Doktrin, menyediakan cara yang lancar untuk mengakses data tanpa memerlukan pertanyaan yang rumit. Walau bagaimanapun, pendekatan ini secara amnya tidak digalakkan kerana ia mungkin membawa kepada isu prestasi dan penyelenggaraan.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Baris Maksimum setiap Kumpulan dalam Doktrin DQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!