Zurückgeben der Top 5 Menüelemente in jeder Kategorie mit MySQL
In einer MySQL-Datenbank haben Sie die Tabelle „Menüs“ mit den Feldern „ „menuid“ und „profileName“ sowie die Tabelle „menuitems“ mit den Feldern „itemid“, „name“ und „menuid“. Sie möchten die fünf wichtigsten Menüpunkte für jedes Menü in der Tabelle „Menüs“ abrufen.
Ein von Ihnen versuchter Ansatz führte zu einem Fehler:
SELECT m.profilename, name FROM menus m WHERE (SELECT name from menuitems s where m.menuid = s.menuid limit 5)
Der Fehler weist jedoch darauf hin, dass die Unterabfrage gibt mehr als eine Zeile zurück. Um dies zu umgehen, können Sie Variablen mit Nebeneffekten verwenden. Hier ist eine überarbeitete Lösung:
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 Abfrage werden die Nebeneffektvariablen @g und @r verwendet, um den aktuellen Menünamen (profileName) und die Position (Zeilennummer) darin zu verfolgen Speisekarte. Die CASE-Anweisung stellt sicher, dass die Position für jedes neue Menü bei 1 beginnt und für nachfolgende Menüelemente erhöht wird. Die letzte WHERE-Klausel filtert nach den obersten fünf Zeilen mit den niedrigsten Positionsnummern.
Das obige ist der detaillierte Inhalt vonWie rufe ich die Top 5 Menüelemente für jedes Menü in MySQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!