Maison >base de données >tutoriel mysql >Comment récupérer les 5 principaux éléments de chaque catégorie dans MySQL tout en évitant l'erreur « La sous-requête renvoie plus d'une ligne » ?

Comment récupérer les 5 principaux éléments de chaque catégorie dans MySQL tout en évitant l'erreur « La sous-requête renvoie plus d'une ligne » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-10 09:13:03545parcourir

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

Récupération des 5 principaux éléments de chaque catégorie dans MySQL

Rencontre avec l'erreur "La sous-requête renvoie plus d'une ligne" lors de la tentative de récupération du les cinq principaux éléments de menu pour chaque catégorie de menu ? La solution réside dans l'utilisation de variables à effets secondaires.

Décomposons l'approche révisée :

Dans la sous-requête, nous introduisons les variables à effets secondaires @r et @g en utilisant la notation @ de SQL. Ces variables sont utilisées pour suivre l'appartenance à un groupe et incrémenter le classement au sein de chaque groupe.

  1. @g:=null - Initialise @g à NULL, indiquant que nous démarrons un nouveau groupe.
  2. @r:=0 - Initialise @r à 0, signifiant le début d'un nouveau rang.
  3. La clause WHERE dans la sous-requête (où m.menuid = s.menuid) garantit que s et m sont aligné en fonction de l'ID du menu.
  4. @r:=case when @g=m.profilename then @r 1 else 1 end - Cette expression de cas incrémente @r de 1 si m.profilename est le même que l'actuel groupe (@g). Sinon, il réinitialise @r à 1, signalant le début d'un nouveau groupe.
  5. @g:=m.profilename - Met à jour @g avec le nom du profil du groupe actuel, nous permettant de suivre les lignes suivantes appartenant à ce groupe. group.
  6. La requête principale récupère le nom du profil et le nom de l'alias de table de sous-requête X.
  7. La condition finale WHERE r <= 5 filtre uniquement les 5 éléments les mieux classés au sein de chaque groupe.

En mettant en œuvre cette approche, vous pouvez obtenir efficacement les résultats souhaités sans l'erreur « La sous-requête renvoie plus d'une ligne ».

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