Rumah > Artikel > pangkalan data > Bagaimana untuk Memesan Keputusan MySQL Sebelum Pengumpulan?
MySQL: Memesan Keputusan Sebelum Kumpulan Oleh
Apabila mengumpulkan hasil dalam MySQL, adalah penting untuk memahami susunan operasi. Secara lalai, MySQL akan memesan keputusan selepas ia dikumpulkan, yang mungkin bukan gelagat yang diingini dalam kes tertentu.
Pertanyaan dan Had Asal
Pertimbangkan perkara berikut 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
Pertanyaan ini mengumpulkan hasil dengan betul untuk menunjukkan hanya siaran terkini untuk setiap pengarang. Walau bagaimanapun, keputusan dipesan selepas pengumpulan, jadi siaran terkini mungkin tidak semestinya berada di permulaan senarai.
Penyelesaian Menggunakan HAVING
Untuk memesan keputusan sebelum mengumpulkan, kita boleh menggunakan klausa HAVING:
SELECT wp_posts.* FROM wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' GROUP BY wp_posts.post_author HAVING wp_posts.post_date = MAX(wp_posts.post_date) ORDER BY wp_posts.post_date DESC
Klausa HAVING menapis keputusan selepas pengumpulan, memastikan bahawa hanya baris dengan tarikh_post_maksimum untuk setiap pengarang dikembalikan. Ini menjamin bahawa siaran terbaharu ditunjukkan pada permulaan senarai.
Penyelesaian Alternatif untuk Pangkalan Data Lain
Jika menggunakan pangkalan data yang tidak menyokong klausa HAVING ( seperti Postgres atau SQL Server), penyelesaian alternatif adalah untuk menyertai jadual asal dengan subquery yang mengira post_date maksimum untuk setiap pengarang:
SELECT wp_posts.* FROM wp_posts JOIN ( SELECT g.post_author MAX(g.post_date) AS post_date FROM wp_posts as g WHERE g.post_status='publish' AND g.post_type='post' GROUP BY g.post_author ) as t ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date ORDER BY wp_posts.post_date
Atas ialah kandungan terperinci Bagaimana untuk Memesan Keputusan MySQL Sebelum Pengumpulan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!