Heim  >  Artikel  >  Datenbank  >  Wie rufe ich die Top 5 Menüelemente aus jeder Kategorie in MySQL ab?

Wie rufe ich die Top 5 Menüelemente aus jeder Kategorie in MySQL ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 02:17:02939Durchsuche

How to Retrieve the Top 5 Menu Items from Each Category in MySQL?

Die Top 5 Elemente aus jeder Kategorie in MySQL zurückgeben

Herausforderung:
Das Top 5 Menü abrufen Elemente aus jeder Kategorie in einer Datenbank, die aus zwei Tabellen besteht, „menus“ und „menuitems“.

Lösung:

Der vorgestellte Code zielt darauf ab, die Top-5-Elemente anzuzeigen pro Menükategorie. Es wird jedoch ein Fehler zurückgegeben, da die Unterabfrage mehrere Zeilen abruft. Um dies zu beheben, können Variablen mit Nebeneffekten verwendet werden, um die Position jeder Zeile innerhalb der Kategorie zu verfolgen.

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:

  1. Die äußere Abfrage wählt den Namen (Kategorie) und den Namen (Menüelement) aus einer Unterabfrage (X) aus, die Zeilenpositions- (r) und Gruppenbezeichnerwerte (g) über Nebeneffektvariablen (@r, @g) zuweist.
  2. Die Unterabfrage verwendet einen Cross-Join zwischen der Menütabelle (m) und einer Tabelle (n), die mit @g und @r als NULL bzw. 0 initialisiert wurde.
  3. Der JOIN mit der Menüelementtabelle (n) fügt das hinzu Menüelementnamen basierend auf den Menü-IDs.
  4. Die CASE-Anweisung weist Zeilenpositionswerte zu, die für jede Zeile innerhalb derselben Kategorie um 1 erhöht werden. Wenn eine neue Kategorie gefunden wird, wird der Zähler auf 1 zurückgesetzt.
  5. Die WHERE-Klausel filtert die Ergebnisse so, dass nur Zeilen innerhalb der Top 5 für jede Kategorie enthalten sind, basierend auf den Zeilenpositionswerten.

Das obige ist der detaillierte Inhalt vonWie rufe ich die Top 5 Menüelemente aus jeder Kategorie in MySQL ab?. 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