Heim  >  Artikel  >  Datenbank  >  Wie rufe ich die Top 5 Menüelemente für jedes Menü in MySQL ab?

Wie rufe ich die Top 5 Menüelemente für jedes Menü in MySQL ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 19:44:02808Durchsuche

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

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!

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