ホームページ  >  記事  >  データベース  >  MySQL の各メニューの上位 5 つのメニュー項目を取得するにはどうすればよいですか?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 19:44:02805ブラウズ

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

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 サイトの他の関連記事を参照してください。

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