ホームページ >データベース >mysql チュートリアル >MySQL の各カテゴリから上位 5 つのメニュー項目を取得するにはどうすればよいですか?

MySQL の各カテゴリから上位 5 つのメニュー項目を取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 02:17:021034ブラウズ

How to Retrieve the Top 5 Menu Items from Each Category in MySQL?

MySQL の各カテゴリから上位 5 項目を返す

チャレンジ:
上位 5 メニューの取得"menus" と "menuitems" の 2 つのテーブルで構成されるデータベース内の各カテゴリの項目。

解決策:

提示されたコードは、上位 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

内訳:

  1. 外部クエリ副次的な変数 (@r、@g) を通じて行位置 (r) とグループ識別子 (g) の値を割り当てるサブクエリ (X) から、名前 (カテゴリ) と名前 (メニュー項目) を選択します。
  2. サブクエリは、メニュー テーブル (m) と @g と @r をそれぞれ NULL と 0 として初期化されたテーブル (n) の間のクロス結合を使用します。
  3. menuitems テーブル (s) との JOIN により、メニュー ID に基づくメニュー項目名。
  4. CASE ステートメントは、同じカテゴリ内の行ごとに 1 ずつ増分して、行位置の値を割り当てます。新しいカテゴリが見つかった場合、カウンタは 1 にリセットされます。
  5. WHERE 句は、行位置の値に基づいて、各カテゴリの上位 5 位以内の行のみを含むように結果をフィルタリングします。

以上がMySQL の各カテゴリから上位 5 つのメニュー項目を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。