MySQL-Abfrage: Auswählen der obersten drei Zeilen aus jeder Kategorie in einer Tabelle
In diesem Szenario haben Sie eine Tabelle mit zahlreichen Datensätzen, nach Kategorie kategorisiert. Ihr Ziel ist es, nur die drei besten Artikel aus jeder Kategorie abzurufen. Während Sie versucht haben, eine Lösung mit Ansichten und LIMIT zu finden, führte dies zu einer begrenzten Anzahl von Datensätzen.
Um dieser Herausforderung zu begegnen, ist es notwendig, Analysefunktionen zu nutzen, die MySQL fehlen. Sie können jedoch mit Variablen einen ähnlichen Effekt erzielen:
<code class="sql">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</code>
Diese Abfrage verwendet die Variablen @rownum und @category, um die Zeilenrangfolge innerhalb von Kategorien zu verfolgen. Zunächst werden beide Variablen auf NULL-/Leerwerte gesetzt.
Für jede Zeile in der Tabelle (Alias „t“) wird geprüft, ob sich die aktuelle Kategorie von der vorherigen unterscheidet. Wenn dies der Fall ist, weist es @rownum 1 zu; andernfalls erhöht es @rownum um 1. Gleichzeitig weist es die aktuelle Kategorie @category zu, um den Kontext für den Vergleich in nachfolgenden Zeilen beizubehalten.
Das Ergebnis ist eine temporäre Tabelle, die jede Zeile innerhalb ihrer Kategorie einordnet. Die letzte WHERE-Klausel filtert dann diese temporäre Tabelle, um nur Zeilen mit einem Rang von 3 oder niedriger anzuzeigen.
Denken Sie daran, die Spaltenverweise in der äußeren SELECT-Klausel (x.*) so anzupassen, dass sie mit den gewünschten Spalten übereinstimmen abrufen.
Das obige ist der detaillierte Inhalt vonWie wähle ich die obersten drei Zeilen aus jeder Kategorie in einer MySQL-Tabelle aus, ohne analytische Funktionen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!