MySQL の各カテゴリから上位 5 項目を取得する
データベースを操作する場合、多くの場合、特定の方法でデータを取得する必要があります。 。この特定の質問には、MySQL の各カテゴリから上位 5 項目を抽出することが含まれます。問題のテーブルは「menus」と「menuitems」です。「menu」にはメニュー情報が含まれ、「menuitems」には個々のメニュー項目の詳細が保持されます。
提供されたクエリ:
SELECT m.profilename, name FROM menus m WHERE (SELECT name from menuitems s where m.menuid = s.menuid limit 5)
残念ながら、このクエリは間違っており、「サブクエリは複数の行を返します。」というエラーが発生します。このエラーは、サブクエリがメニュー カテゴリごとに複数の行を返し、1 つのメニューには 5 つの項目しか含めることができないという条件に違反しているために発生します。
この問題を解決するには、副作用のある変数を使用する必要があります。
修正されたクエリ:
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
この修正されたクエリでは、副作用が導入されています。変数:
これらの変数を使用すると、クエリは各メニューとその関連項目を反復処理して、各メニューのカウントを増加させます。この手法により、各メニュー カテゴリの上位 5 項目のみが確実に取得されます。
以上がMySQL の各カテゴリから上位 5 項目を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。