Bahasa Pertanyaan Doktrin: Mencari Baris Maksimum atau Terkini Setiap Kumpulan
Dalam sesetengah operasi pangkalan data, adalah perlu untuk membuat pertanyaan untuk maksimum atau terkini baris dalam kumpulan data. Untuk menterjemah pernyataan SQL yang melaksanakan operasi sedemikian ke dalam Doctrine Query Language (DQL), anda mesti memanfaatkan teknik tertentu.
Satu teknik SQL biasa ialah menggunakan subquery untuk menentukan nilai tertinggi atau terkini dalam kumpulan dan kemudian menyertai pertanyaan utama dengan hasil tersebut. Walau bagaimanapun, pendekatan ini boleh menjadi rumit apabila ia berkaitan dengan Doktrin.
Penyelesaian alternatif ialah menulis semula pernyataan SQL untuk mengelak daripada menggunakan fungsi agregat. Sebagai contoh, untuk mencari skor tertinggi bagi setiap nama, anda boleh menggunakan pernyataan SQL berikut:
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
Pertanyaan ini memilih semua baris daripada jadual skor di mana tiada markah yang lebih tinggi direkodkan untuk nama yang sama.
Untuk menterjemah pernyataan SQL kepada DQL, anda boleh menulis:
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
Anda juga boleh menggunakan API pembina pertanyaan dalam Doktrin untuk membina pertanyaan:
$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();
Ini menyediakan cara yang cekap untuk melaksanakan operasi yang sama seperti pernyataan SQL asal menggunakan Doktrin.
Atas ialah kandungan terperinci Bagaimana Mencari Baris Maksimum atau Terkini Setiap Kumpulan Dengan Cekap Menggunakan Bahasa Pertanyaan Doktrin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!