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

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

DDD
DDDasal
2024-12-29 02:22:10384semak imbas

How to Efficiently Get the Latest Post for Each Author in MySQL Without 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!

Kenyataan:
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