Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Cekap Mendapatkan Catatan Terkini untuk Setiap Pengarang dalam MySQL Tanpa Subqueries?
Pesanan MySQL Mengikut Sebelum Kumpulan Oleh: Pendekatan Alternatif
Memesan baris sebelum pengumpulan boleh menjadi mencabar dalam MySQL, terutamanya apabila susunan yang dikehendaki adalah tidak dijamin oleh kumpulan seterusnya oleh. Walaupun menggunakan subkueri ialah penyelesaian biasa, ia mungkin tidak selalu menjadi pendekatan yang paling optimum.
Dalam senario yang dibentangkan, matlamatnya adalah untuk mendapatkan semula siaran terkini bagi setiap pengarang daripada jadual wp_posts. Pertanyaan yang disediakan, termasuk yang diterangkan sebagai "jawapan semasa yang diterima," gagal memberikan hasil yang dijangkakan secara konsisten.
Penyelesaian alternatif yang menangani isu ini tanpa menggunakan subkueri ialah memanfaatkan gabungan fungsi tetingkap dan penyertaan sendiri:
WITH LatestPostsPerAuthor AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY post_author ORDER BY post_date DESC) AS rn FROM wp_posts WHERE post_status='publish' AND post_type='post' ) SELECT a.* FROM LatestPostsPerAuthor a JOIN LatestPostsPerAuthor b ON a.rn = b.rn AND a.post_author = b.post_author GROUP BY a.post_author ORDER BY a.post_date DESC;
Pertanyaan ini menggunakan fungsi tetingkap ROW_NUMBER() untuk menetapkan kedudukan kepada siaran berdasarkan tarikh_pos mereka dalam setiap pengarang kumpulan. Gabungan sendiri kemudian memastikan bahawa hanya baris dengan kedudukan tertinggi (iaitu, siaran terkini) dikekalkan untuk pengumpulan dan pesanan.
Dengan menggunakan pendekatan ini, hasil yang diinginkan boleh dicapai tanpa overhed a subquery, memberikan hasil yang tepat dan konsisten untuk senario yang diberikan.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mendapatkan Catatan Terkini untuk Setiap Pengarang dalam MySQL Tanpa Subqueries?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!