Mendapatkan semula 5 Item Teratas daripada Setiap Kategori dalam MySQL
Apabila bekerja dengan pangkalan data, ia sering menjadi perlu untuk mendapatkan semula data dengan cara tertentu . Soalan khusus ini melibatkan mengekstrak 5 item teratas dari setiap kategori dalam MySQL. Jadual yang dimaksudkan ialah "menu" dan "menuitems," dengan "menu" mengandungi maklumat menu dan "menuitems" menyimpan butiran tentang item menu individu.
Pertanyaan yang disediakan:
SELECT m.profilename, name FROM menus m WHERE (SELECT name from menuitems s where m.menuid = s.menuid limit 5)
Malangnya, pertanyaan ini tidak betul dan akan menjana ralat "Subquery mengembalikan lebih daripada 1 baris." Ralat ini berlaku kerana subkueri mengembalikan berbilang baris untuk setiap kategori menu, melanggar syarat bahawa satu menu hanya boleh mempunyai lima item.
Untuk menyelesaikan isu ini, anda perlu menggunakan pembolehubah kesan sampingan.
Pertanyaan yang dibetulkan:
SELECT profilename, name FROM ( SELECT m.profilename, s.name, @r:=case when @g=m.profilename then @r+1 else 1 end r, @g:=m.profilename FROM (select @g:=null,@r:=0) n cross join menus m left join menuitems s on m.menuid = s.menuid ) X WHERE r <= 5
Dalam pertanyaan yang diperbetulkan ini, kami memperkenalkan pembolehubah kesan sampingan:
Dengan menggunakan pembolehubah ini, pertanyaan akan berulang melalui setiap menu dan item yang berkaitan dengannya, menambah kiraan untuk setiap menu. Teknik ini memastikan anda mendapatkan hanya 5 item teratas untuk setiap kategori menu.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan 5 Item Teratas dari Setiap Kategori dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!