Pesanan MySQL sebelum Kumpulan Oleh
Dalam MySQL, melaksanakan klausa GROUP BY biasanya memerintahkan keputusan selepas kumpulan telah dibentuk. Walau bagaimanapun, terdapat senario di mana anda ingin memesan keputusan sebelum mengumpulkan.
Pertimbangkan pertanyaan berikut:
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 bertujuan untuk mencari siaran terkini untuk setiap pengarang dan kemudian mengumpulkan keputusan. Walau bagaimanapun, masalahnya ialah ia menyusun keputusan selepas mengumpulkan, bukan sebelum ini.
Penyelesaian
Untuk memesan keputusan sebelum mengumpulkan, anda boleh menggunakan pendekatan berikut:
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 memastikan bahawa hanya catatan terkini untuk setiap pengarang dipilih sebelum dikumpulkan.
Penyelesaian Alternatif
Dalam kes di mana HAVING klausa tidak boleh dilaksanakan, seperti dalam Postgres atau SQL Server, anda boleh menggunakan penyelesaian alternatif berikut:
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
Pertanyaan ini menggunakan subkueri untuk mencari tarikh siaran maksimum bagi setiap pengarang dan kemudian menyertainya dengan jadual asal untuk mendapatkan semula rekod siaran sebenar.
Atas ialah kandungan terperinci Bagaimana untuk Memesan Keputusan Sebelum Pengumpulan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!