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

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

DDD
DDDオリジナル
2024-11-06 13:33:03367ブラウズ

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

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

この修正されたクエリでは、副作用が導入されています。変数:

  • @g: 現在のメニュー名を追跡します
  • @r: 各メニューの項目をカウントします
  • r は結果を上位 5 項目に制限しますメニューごと

これらの変数を使用すると、クエリは各メニューとその関連項目を反復処理して、各メニューのカウントを増加させます。この手法により、各メニュー カテゴリの上位 5 項目のみが確実に取得されます。

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

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