Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Cekap Mendapatkan Catatan Terkini untuk Setiap Pengarang dalam MySQL?

Bagaimana untuk Cekap Mendapatkan Catatan Terkini untuk Setiap Pengarang dalam MySQL?

DDD
Lepaskan: 2024-12-15 20:10:14
asal
486 orang telah melayarinya

How to Efficiently Retrieve the Latest Post for Each Author in MySQL?

Mendapatkan semula Catatan Terkini bagi setiap Pengarang dalam MySQL: Menggunakan JOIN Daripada Pesanan oleh Sebelum Kumpulan Oleh

Apabila berusaha untuk mendapatkan semula catatan terkini untuk setiap pengarang dalam pangkalan data, pendekatan awal menggunakan klausa ORDER BY sebelum GROUP BY dalam MySQL sering menghasilkan hasil yang tidak diingini. Walau bagaimanapun, menggunakan subkueri untuk memesan baris sebelum pengumpulan boleh menjadi penyelesaian yang berpotensi.

Mengapa Pesanan Sebelum Kumpulan Oleh Boleh Bermasalah

Pertimbangkan contoh pertanyaan:

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author           
ORDER BY wp_posts.post_date DESC
Salin selepas log masuk

Walaupun pertanyaan ini bertujuan untuk mengumpulkan siaran oleh pengarang dan mengembalikan siaran terkini untuk setiap satu, ia boleh gagal apabila terdapat berbilang catatan dengan post_date yang sama. Dalam kes sedemikian, susunan siaran dikembalikan dalam setiap kumpulan pengarang menjadi tidak dapat diramalkan, yang membawa kepada hasil yang tidak konsisten.

Menggunakan Subkueri untuk Menyelesaikan Isu

Cadangan penyelesaian kepada isu ini adalah dengan menggunakan subkueri seperti berikut:

SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author 
Salin selepas log masuk

Dengan menggunakan ini subquery, siaran mula-mula dipesan mengikut tarikh_pos mereka dalam susunan menurun. Jadual subkueri yang terhasil kemudiannya berfungsi sebagai sumber untuk pertanyaan utama, memastikan siaran terbaharu diletakkan di bahagian atas setiap kumpulan pengarang sebelum dikumpulkan.

Pendekatan Alternatif dengan JOIN

Satu lagi pendekatan berkesan untuk mendapatkan semula catatan terkini bagi setiap pengarang ialah menggunakan operasi JOIN. Pertanyaan berikut menunjukkan kaedah ini:

SELECT p1.* 
FROM wp_posts p1
INNER JOIN
(
    SELECT max(post_date) MaxPostDate, post_author
    FROM wp_posts
    WHERE post_status='publish'
       AND post_type='post'
    GROUP BY post_author
) p2
  ON p1.post_author = p2.post_author
  AND p1.post_date = p2.MaxPostDate
WHERE p1.post_status='publish'
  AND p1.post_type='post'
order by p1.post_date desc
Salin selepas log masuk

Pertanyaan ini melibatkan dua langkah:

  1. Sesuai pertanyaan mencari tarikh_post_maksimum dan pengarang_tulisan yang sepadan untuk setiap pengarang.
  2. Pertanyaan utama menyertai jadual yang mengandungi catatan dengan hasil subquery pada kedua-dua post_date dan post_author, dengan berkesan mendapatkan semula siaran terbaharu untuk setiap pengarang.

Kesimpulan

Semasa menggunakan subkueri untuk memesan baris sebelum mengumpulkan boleh menjadi penyelesaian yang berkesan untuk mendapatkan semula catatan terkini setiap pengarang , ia bukan satu-satunya pendekatan yang ada. Operasi JOIN menyediakan kaedah alternatif yang cekap dan menghasilkan hasil yang boleh dipercayai.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mendapatkan Catatan Terkini untuk Setiap Pengarang dalam MySQL?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan