Maison  >  Article  >  base de données  >  Comment récupérer les 5 principaux éléments de menu pour chaque menu dans MySQL ?

Comment récupérer les 5 principaux éléments de menu pour chaque menu dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-05 19:44:02806parcourir

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

Renvoyer les 5 principaux éléments de menu dans chaque catégorie à l'aide de MySQL

Dans une base de données MySQL, vous avez la table 'menus' avec des champs' menuid' et 'profileName', ainsi que la table 'menuitems' avec les champs 'itemid', 'name' et 'menuid'. Vous souhaitez récupérer les cinq principaux éléments de menu pour chaque menu dans le tableau « menus ».

Une approche que vous avez essayée a entraîné une erreur :

SELECT m.profilename, name
FROM menus m 
WHERE (SELECT name
        from menuitems s
        where m.menuid = s.menuid
        limit 5)

Cependant, l'erreur indique que le la sous-requête renvoie plus d'une ligne. Pour surmonter ce problème, vous pouvez utiliser des variables à effets secondaires. Voici une solution révisée :

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

Dans cette requête, les variables à effets secondaires @g et @r sont utilisées pour garder une trace du nom du menu actuel (profileName) et de la position (numéro de ligne) à l'intérieur de celui-ci. menu. L'instruction CASE garantit que la position commence à 1 pour chaque nouveau menu et s'incrémente pour les éléments de menu suivants. La clause WHERE finale filtre les 5 premières lignes avec les numéros de position les plus bas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn