MySQL を使用して各カテゴリの上位 5 つのメニュー項目を返す
MySQL データベースには、フィールドを持つ 'menus' テーブルがあります。 「menuid」と「profileName」、およびフィールド「itemid」、「name」、および「menuid」を含む「menuitems」テーブル。 「メニュー」テーブル内の各メニューの上位 5 つのメニュー項目を取得したいとします。
試した 1 つのアプローチではエラーが発生しました:
SELECT m.profilename, name FROM menus m WHERE (SELECT name from menuitems s where m.menuid = s.menuid limit 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
このクエリでは、副作用のある変数 @g と @r を使用して、現在のメニュー名 (profileName) とそのメニュー内での位置 (行番号) を追跡します。メニュー。 CASE ステートメントにより、新しいメニューごとに位置が 1 から始まり、後続のメニュー項目ごとに位置が増加することが保証されます。最後の WHERE 句は、位置番号が最も小さい上位 5 行をフィルターします。
以上がMySQL の各メニューの上位 5 つのメニュー項目を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。