ホームページ >データベース >mysql チュートリアル >MySQL の各カテゴリの上位 5 項目を返す方法: サブクエリ エラーの処理?

MySQL の各カテゴリの上位 5 項目を返す方法: サブクエリ エラーの処理?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-06 04:25:02667ブラウズ

How to Return the Top 5 Items in Each Category in MySQL: Handling Subquery Errors?

MySQL で各カテゴリの上位 5 項目を返す方法

各カテゴリから限られた数のレコードを返すことは、MySQL の一般的な要件です。データベースアプリケーション。メニューごとに上位 5 つのメニュー項目を返すという特定のケースでは、サブクエリがメニューごとに複数の行を返すために問題が発生し、「サブクエリは 1 行以上を返します」エラーが発生します。

これを克服するにはこの問題に対して、一般的なアプローチは、副作用をもたらす変数を使用することです。以下はエラーに対処する修正されたクエリです:

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 はサイドです- 現在のカテゴリと、そのカテゴリに対して返されたレコードの数を追跡するために使用される変数に影響します。
  2. 初期化: 次を使用して、@g と @r をそれぞれ null と 0 に初期化します。サブクエリ。
  3. カテゴリのループ: メニュー テーブルと n の間のクロス結合を使用して、各メニュー プロファイルをループします。
  4. カテゴリ グループとレコードCount: カテゴリごとに、case ステートメントを使用して行番号 (r) を計算します。現在のカテゴリが前のカテゴリと異なる場合は、r を 1 にリセットします。それ以外の場合は、1 ずつ増加します。
  5. カテゴリ グループの更新: 現在のカテゴリを追跡するために、@g を現在のカテゴリ プロファイルに更新します。
  6. 上位 5 の選択: 最後に、レコード数 r が 5 以下の場合にのみプロファイル名と名前を選択します。

このクエリは、副作用のある変数を利用することで、カテゴリごとに最大 5 つのレコードを返し、元のエラーを解決します。

以上がMySQL の各カテゴリの上位 5 項目を返す方法: サブクエリ エラーの処理?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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