MySQL の各カテゴリから上位 5 項目を取得する
各メニューカテゴリのトップ 5 メニュー項目は?解決策は、副作用のある変数を使用することにあります。
改訂されたアプローチを詳しく見てみましょう:
サブクエリでは、SQL の @ 表記を使用して副作用のある変数 @r と @g を導入します。これらの変数は、グループ メンバーシップを追跡し、各グループ内のランクを増やすために使用されます。
- @g:=null - @g を NULL に初期化し、新しいグループを開始していることを示します。
- @r:=0 - @r を 0 に初期化し、新しいランクの開始を示します。
- の WHERE 句サブクエリ (m.menuid = s.menuid の場合) は、メニュー ID に基づいて s と m が位置合わせされていることを確認します。
- @r:=case when @g=m.profilename then @r 1 else 1 end - This m.profilename が現在のグループ (@g) と同じ場合、case 式は @r を 1 ずつ増分します。それ以外の場合は、@r を 1 にリセットし、新しいグループの開始を通知します。
- @g:=m.profilename - @g を現在のグループのプロファイル名で更新し、これに属する後続の行を追跡できるようにします。 group.
- メイン クエリは、サブクエリ テーブル エイリアス X からプロファイル名と名前を取得します。
- 最後の WHERE r
このアプローチを実装すると、「サブクエリは複数の行を返します」エラーを発生させることなく、目的の結果を効率的に取得できます。 .
以上が「サブクエリは複数の行を返します」エラーを回避しながら、MySQL の各カテゴリから上位 5 項目を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。