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!