Maison  >  Article  >  base de données  >  Comment renvoyer les 5 principaux éléments de chaque catégorie dans MySQL : gestion des erreurs de sous-requête ?

Comment renvoyer les 5 principaux éléments de chaque catégorie dans MySQL : gestion des erreurs de sous-requête ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 04:25:02576parcourir

How to Return the Top 5 Items in Each Category in MySQL: Handling Subquery Errors?

Comment renvoyer les 5 principaux éléments de chaque catégorie dans MySQL

Renvoyer un nombre limité d'enregistrements de chaque catégorie est une exigence courante dans applications de base de données. Dans le cas spécifique du renvoi des 5 premiers éléments de menu par menu, le défi survient car la sous-requête renvoie plusieurs lignes pour chaque menu, conduisant à l'erreur « La sous-requête renvoie plus d'une ligne ».

Pour surmonter ce problème problème, une approche courante consiste à utiliser des variables à effets secondaires. Voici une requête corrigée qui corrige l'erreur :

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

Décomposition de la requête :

  1. Variables à effets secondaires : @r et @g sont latéraux -variables d'effet utilisées pour garder une trace de la catégorie actuelle et du nombre d'enregistrements renvoyés pour cette catégorie.
  2. Initialisation : Nous initialisons @g et @r à null et 0, respectivement, en utilisant une sous-requête.
  3. Boucle sur les catégories : Nous utilisons une jointure croisée entre la table des menus et n pour parcourir chaque profil de menu.
  4. Groupe de catégories et enregistrement Count : Pour chaque catégorie, nous calculons le numéro de ligne (r) à l'aide d'une instruction case. Si la catégorie actuelle est différente de la précédente, on remet r à 1 ; sinon, nous l'incrémentons de 1.
  5. Mettre à jour le groupe de catégories : Nous mettons à jour @g vers le profil de catégorie actuel pour garder une trace de la catégorie actuelle.
  6. Sélection du Top 5 : Enfin, nous sélectionnons le nom et le nom du profil uniquement si le nombre d'enregistrements r est inférieur ou égal à 5.

En utilisant des variables à effets secondaires, cette requête garantit qu'il renvoie au plus 5 enregistrements pour chaque catégorie, résolvant l'erreur d'origine.

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