Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Rekod Maksimum/Terkini Setiap Kumpulan Menggunakan Bahasa Pertanyaan Doktrin (DQL)?

Bagaimana untuk Mendapatkan Rekod Maksimum/Terkini Setiap Kumpulan Menggunakan Bahasa Pertanyaan Doktrin (DQL)?

Mary-Kate Olsen
Lepaskan: 2024-11-19 18:08:03
asal
296 orang telah melayarinya

How to Retrieve the Maximum/Latest Record Per Group Using Doctrine Query Language (DQL)?

Bahasa Pertanyaan Doktrin: Mendapatkan Rekod Maksimum/Terkini Bagi Setiap Kumpulan

Bahasa Pertanyaan Doktrin (DQL) menawarkan keupayaan berkuasa untuk mendapatkan semula data daripada pangkalan data. Satu tugas biasa ialah mendapatkan baris maksimum atau terkini untuk setiap kumpulan dalam set data.

Menterjemah SQL kepada DQL

Dalam kes anda, anda sedang bergelut untuk menterjemah mengikuti pernyataan SQL kepada DQL:

SELECT a.*
FROM score a
INNER JOIN (
  SELECT name, MAX(score) AS highest
  FROM score
  GROUP BY name
) b
ON a.score = b.highest AND a.name = b.name
GROUP BY name
ORDER BY b.highest DESC, a.dateCreated DESC
Salin selepas log masuk

Pertanyaan ini bertujuan untuk mencari skor tertinggi bagi setiap nama, bersama-sama lajur lain dan menyusun keputusan mengikut skor dan kemudian mengikut tarikh dibuat.

DQL Equivalent

Untuk mencapai fungsi yang sama dalam DQL, anda boleh menggunakan pertanyaan berikut:

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, a.dateCreated DESC
Salin selepas log masuk

Penjelasan

Pertanyaan DQL ini menggunakan gabungan kiri untuk membandingkan baris semasa (a) dengan baris yang mempunyai nama yang sama (b) dengan skor yang lebih tinggi. Jika tiada baris dengan skor yang lebih tinggi untuk nama yang diberikan, b.skor akan menjadi NULL, yang digunakan untuk menapis keputusan.

Sintaks Alternatif

Sebagai alternatif, anda boleh menggunakan sintaks pembina pertanyaan, yang menawarkan cara intuitif dan fleksibel untuk membina pertanyaan:

$qb = $em->createQueryBuilder();
$qb->select('a')
   ->from('AppBundle:Score', 'a')
   ->leftJoin('AppBundle:Score', 'b', 'WITH', 'a.name = b.name AND a.score < b.score')
   ->where('b.score IS NULL')
   ->orderBy('a.score', 'DESC')
   ->orderBy('a.dateCreated', 'DESC');

$results = $qb->getQuery()->getResult();
Salin selepas log masuk

Pertimbangan Tambahan

Untuk pengoptimuman prestasi, pertimbangkan untuk mencipta indeks pada lajur skor dan pada gabungan nama dan lajur skor.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Maksimum/Terkini Setiap Kumpulan Menggunakan Bahasa Pertanyaan Doktrin (DQL)?. 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