Auswählen der obersten 3 Zeilen aus jeder Kategorie in MySql
In einer Tabelle mit zahlreichen Datensätzen und einer Kategoriespalte entsteht die Aufgabe zum Abrufen Nur die beiden besten Artikel aus jeder Kategorie. Um dies zu erreichen, versucht der Benutzer zunächst, eine Ansicht mit begrenzten Zeilen zu erstellen, wodurch die Anzahl der abgerufenen Zeilen auf zwei pro Kategorie begrenzt wird. Dieser Ansatz erweist sich jedoch als unzureichend.
Analysefunktionen verstehen
Das gewünschte Ergebnis erfordert die Verwendung von Analyse-/Fenster-/Rankingfunktionen. Diese Funktionen, die MySQL von Natur aus nicht unterstützt, können mithilfe von Variablen angenähert werden.
Analysefunktionen emulieren
Der folgende Code emuliert Analysefunktionen:
SELECT x.* FROM (SELECT t.*, CASE WHEN @category != t.category THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, @category := t.category AS var_category FROM TBL_ARTIKUJT t JOIN (SELECT @rownum := NULL, @category := '') r ORDER BY t.category) x WHERE x.rank <= 3
Die Variablen @rownum und @category werden verwendet, um die Zeilennummer bzw. die aktuelle Kategorie zu verfolgen. Durch die Verwendung dieser Variablen wird der Rang jeder Zeile innerhalb ihrer Kategorie bestimmt und diejenigen innerhalb der ersten drei Ränge ausgewählt.
Anpassen des Ergebnissatzes
Um dies sicherzustellen Wenn nur die gewünschten Spalten zurückgegeben werden, geben Sie die erforderlichen Spalten in der SELECT-Anweisung an, wie unten gezeigt:
SELECT x.articleid, x.title FROM (SELECT t.*, CASE WHEN @category != t.category THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, @category := t.category AS var_category FROM TBL_ARTIKUJT t JOIN (SELECT @rownum := NULL, @category := '') r ORDER BY t.category) x WHERE x.rank <= 3
Das obige ist der detaillierte Inhalt vonWie erhalte ich die obersten drei Zeilen aus jeder Kategorie in MySQL ohne Analysefunktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!