Heim  >  Artikel  >  Datenbank  >  Wie erhalte ich die obersten drei Zeilen aus jeder Kategorie in MySQL ohne Analysefunktionen?

Wie erhalte ich die obersten drei Zeilen aus jeder Kategorie in MySQL ohne Analysefunktionen?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 10:34:27801Durchsuche

How to Get the Top 3 Rows From Each Category in MySQL Without Analytic Functions?

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!

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