Memilih 3 Baris Teratas daripada Setiap Kategori dalam MySql
Dalam jadual dengan banyak rekod dan lajur kategori, tugas timbul untuk mendapatkan semula hanya dua artikel teratas dari setiap kategori. Untuk mencapai matlamat ini, pengguna mula-mula cuba membuat had paparan, mengehadkan bilangan baris yang diambil kepada dua setiap kategori. Walau bagaimanapun, pendekatan ini terbukti tidak mencukupi.
Memahami Fungsi Analitik
Hasil yang diinginkan memerlukan penggunaan fungsi analitik/windowing/ranking. Fungsi ini, yang tidak disokong oleh MySQL secara semulajadi, boleh dianggarkan menggunakan pembolehubah.
Meniru Fungsi Analitik
Kod berikut meniru fungsi analitik:
SELECT x.* FROM (SELECT t.*, CASE WHEN @category != t.category THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, @category := t.category AS var_category FROM TBL_ARTIKUJT t JOIN (SELECT @rownum := NULL, @category := '') r ORDER BY t.category) x WHERE x.rank <= 3
Pembolehubah @rownum dan @category digunakan untuk menjejaki nombor baris dan kategori semasa, masing-masing. Dengan menggunakan pembolehubah ini, kedudukan setiap baris dalam kategorinya ditentukan dan mereka dalam 3 kedudukan teratas dipilih.
Menyesuaikan Set Keputusan
Untuk memastikan bahawa hanya lajur yang dikehendaki dikembalikan, nyatakan lajur yang diperlukan dalam pernyataan SELECT, seperti yang ditunjukkan di bawah:
SELECT x.articleid, x.title FROM (SELECT t.*, CASE WHEN @category != t.category THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, @category := t.category AS var_category FROM TBL_ARTIKUJT t JOIN (SELECT @rownum := NULL, @category := '') r ORDER BY t.category) x WHERE x.rank <= 3
Atas ialah kandungan terperinci Bagaimana Mendapatkan 3 Baris Teratas Dari Setiap Kategori dalam MySQL Tanpa Fungsi Analitik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!