Heim  >  Artikel  >  Datenbank  >  Wie gebe ich die Top 5 Elemente in jeder Kategorie in MySQL zurück: Umgang mit Unterabfragefehlern?

Wie gebe ich die Top 5 Elemente in jeder Kategorie in MySQL zurück: Umgang mit Unterabfragefehlern?

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 04:25:02655Durchsuche

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

So geben Sie die Top 5 Elemente in jeder Kategorie in MySQL zurück

Die Rückgabe einer begrenzten Anzahl von Datensätzen aus jeder Kategorie ist eine häufige Anforderung in Datenbankanwendungen. Im speziellen Fall der Rückgabe der fünf wichtigsten Menüpunkte pro Menü entsteht die Herausforderung dadurch, dass die Unterabfrage mehrere Zeilen für jedes Menü zurückgibt, was zum Fehler „Unterabfrage gibt mehr als 1 Zeile zurück“ führt.

Um dieses Problem zu lösen Bei diesem Problem besteht ein gängiger Ansatz darin, Variablen mit Nebeneffekten zu verwenden. Hier ist eine korrigierte Abfrage, die den Fehler behebt:

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

Aufschlüsselung der Abfrage:

  1. Variablen mit Nebeneffekten: @r und @g sind seitlich -Effektive Variablen, die verwendet werden, um die aktuelle Kategorie und die Anzahl der für diese Kategorie zurückgegebenen Datensätze zu verfolgen.
  2. Initialisierung: Wir initialisieren @g und @r mit null bzw. 0 eine Unterabfrage.
  3. Kategorien durchlaufen: Wir verwenden einen Cross-Join zwischen der Menütabelle und n, um jedes Menüprofil zu durchlaufen.
  4. Kategoriegruppe und Datensatz Anzahl: Für jede Kategorie berechnen wir die Zeilennummer (r) mithilfe einer Case-Anweisung. Wenn sich die aktuelle Kategorie von der vorherigen unterscheidet, setzen wir r auf 1 zurück; andernfalls erhöhen wir es um 1.
  5. Kategoriegruppe aktualisieren: Wir aktualisieren @g auf das aktuelle Kategorieprofil, um den Überblick über die aktuelle Kategorie zu behalten.
  6. Auswahl der Top 5: Schließlich wählen wir den Profilnamen und den Namen nur aus, wenn die Datensatzanzahl r kleiner oder gleich 5 ist.

Durch die Verwendung von Variablen mit Nebeneffekten stellt diese Abfrage sicher, dass dies der Fall ist Gibt höchstens 5 Datensätze für jede Kategorie zurück und behebt den ursprünglichen Fehler.

Das obige ist der detaillierte Inhalt vonWie gebe ich die Top 5 Elemente in jeder Kategorie in MySQL zurück: Umgang mit Unterabfragefehlern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn