Bagaimana Mencari Baris Maksimum atau Terkini Setiap Kumpulan Dengan Cekap Menggunakan Bahasa Pertanyaan Doktrin?

Barbara Streisand
Lepaskan: 2024-11-20 19:00:20
asal
852 orang telah melayarinya

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

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 
Salin selepas log masuk

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
Salin selepas log masuk

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan