Abrufen der Top 5 Elemente aus jeder Kategorie in MySQL
Bei der Arbeit mit Datenbanken ist es oft notwendig, Daten auf eine bestimmte Weise abzurufen . Bei dieser speziellen Frage geht es darum, die Top-5-Elemente aus jeder Kategorie in MySQL zu extrahieren. Bei den betreffenden Tabellen handelt es sich um „menus“ und „menuitems“, wobei „menus“ Menüinformationen enthält und „menuitems“ Details zu einzelnen Menüelementen enthält.
Die bereitgestellte Abfrage:
SELECT m.profilename, name FROM menus m WHERE (SELECT name from menuitems s where m.menuid = s.menuid limit 5)
Leider ist diese Abfrage falsch und erzeugt den Fehler „Unterabfrage gibt mehr als eine Zeile zurück.“ Dieser Fehler tritt auf, weil die Unterabfrage mehrere Zeilen für jede Menükategorie zurückgibt und damit gegen die Bedingung verstößt, dass ein einzelnes Menü nur fünf Elemente enthalten darf.
Um dieses Problem zu beheben, müssen Sie Variablen mit Nebeneffekten verwenden.
Die korrigierte Abfrage:
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
In dieser korrigierten Abfrage führen wir Variablen mit Nebeneffekten ein:
Durch die Verwendung dieser Variablen durchläuft die Abfrage jedes Menü und die zugehörigen Elemente und erhöht die Anzahl für jedes Menü. Diese Technik stellt sicher, dass Sie nur die Top-5-Elemente für jede Menükategorie abrufen.
Das obige ist der detaillierte Inhalt vonWie rufe ich die Top 5 Elemente aus jeder Kategorie in MySQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!