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
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
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
Pertanyaan ini melibatkan dua langkah:
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!