MySQL Query: Memilih 3 Baris Teratas daripada Setiap Kategori dalam Jadual
Dalam senario ini, anda mempunyai jadual dengan banyak rekod, dikategorikan mengikut kategori. Matlamat anda adalah untuk mendapatkan hanya tiga artikel teratas daripada setiap kategori. Semasa anda mencuba penyelesaian menggunakan paparan dan LIMIT, ia menghasilkan bilangan rekod yang terhad.
Untuk menangani cabaran ini, anda perlu menggunakan fungsi analitik, yang kekurangan MySQL. Walau bagaimanapun, anda boleh mencapai kesan yang sama menggunakan pembolehubah:
<code class="sql">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</code>
Pertanyaan ini menggunakan pembolehubah @rownum dan @category untuk menjejak kedudukan baris dalam kategori. Ia bermula dengan menetapkan kedua-dua pembolehubah kepada nilai NULL/kosong.
Untuk setiap baris dalam jadual (disebut sebagai "t"), ia menyemak sama ada kategori semasa berbeza daripada yang sebelumnya. Jika ia berlaku, ia memberikan 1 kepada @rownum; jika tidak, ia menambah @rownum sebanyak 1. Pada masa yang sama, ia menetapkan kategori semasa kepada @category untuk mengekalkan konteks untuk perbandingan dalam baris berikutnya.
Hasilnya ialah jadual sementara yang menyusun setiap baris dalam kategorinya. Klausa WHERE akhir kemudian menapis jadual sementara ini untuk memaparkan hanya baris dengan pangkat 3 atau lebih rendah.
Ingat untuk melaraskan rujukan lajur dalam klausa SELECT luar (x.*) agar sepadan dengan lajur yang anda mahu dapatkan semula.
Atas ialah kandungan terperinci Bagaimana untuk Memilih 3 Baris Teratas daripada Setiap Kategori dalam Jadual MySQL Tanpa Menggunakan Fungsi Analitik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!