Gibt es eine Möglichkeit, die tatsächliche Zeilennummer aus einer Abfrage abzurufen?
Ich möchte in der Lage sein, eine Tabelle namens liga_girl nach einem Feld namens Punktzahl zu ordnen. und geben Sie den Benutzernamen und die tatsächliche Zeilenposition dieses Benutzernamens zurück.
Ich möchte die Benutzer einordnen, damit ich erkennen kann, wo sich ein bestimmter Benutzer befindet, d. H. Joe ist Position 100 von 200, dh
User Score Row
Joe 100 1
Bob 50 2
Bill 10 3
Ich habe hier einige Lösungen gesehen, aber die meisten habe ich ausprobiert, und keine von ihnen gibt tatsächlich die Zeilennummer zurück.
Ich habe das versucht:
SELECT position, username, score
FROM (SELECT @row := @row + 1 AS position, username, score
FROM league_girl GROUP BY username ORDER BY score DESC)
Wie abgeleitet
... aber es scheint nicht die Zeilenposition zurückzugeben.
Irgendwelche Ideen?
Antworten:
Möglicherweise möchten Sie Folgendes ausprobieren:
Der
JOIN (SELECT @curRow := 0)
Teil ermöglicht die Variableninitialisierung, ohne dass ein separaterSET
Befehl erforderlich ist .Testfall:
Testabfrage:
Ergebnis:
quelle
@curRow
indem Sie dieJOIN
Anweisung durch ein Komma ersetzen , wie folgt:FROM league_girl l, (SELECT @curRow := 0) r
ORDER BY
?quelle
Hier kommt die Struktur der Vorlage, die ich verwendet habe:
Und hier ist mein Arbeitscode:
quelle
Sie können auch verwenden
um die Zählervariable zu initialisieren.
quelle
@curRow
Möglicherweise haben Sie noch einen Wert aus dem letzten Mal, als Sie diese Abfrage in der aktuellen Sitzung ausgeführt haben.Angenommen, MySQL unterstützt dies, können Sie dies problemlos mit einer Standard-SQL-Unterabfrage tun:
Bei großen Mengen angezeigter Ergebnisse ist dies etwas langsam und Sie möchten stattdessen zu einem Self-Join wechseln.
quelle
Wenn Sie nur die Position eines bestimmten Benutzers nach der Reihenfolge nach Feldbewertung wissen möchten, können Sie einfach alle Zeilen aus Ihrer Tabelle auswählen, in denen die Feldbewertung höher ist als die aktuelle Benutzerbewertung. Verwenden Sie die zurückgegebene Zeilennummer + 1, um die Position dieses aktuellen Benutzers zu ermitteln.
Angenommen, Ihre Tabelle
league_girl
und Ihr primäres Feld sindid
, können Sie Folgendes verwenden:quelle
Ich fand die ursprüngliche Antwort unglaublich hilfreich, wollte aber auch eine bestimmte Reihe von Zeilen basierend auf den von mir eingefügten Zeilennummern erfassen. Aus diesem Grund habe ich die gesamte ursprüngliche Antwort in eine Unterabfrage eingeschlossen, damit ich auf die von mir eingefügte Zeilennummer verweisen kann.
Eine Unterabfrage in einer Unterabfrage zu haben, ist nicht sehr effizient. Es lohnt sich daher zu testen, ob Sie ein besseres Ergebnis erzielen, wenn Ihr SQL Server diese Abfrage verarbeitet oder die gesamte Tabelle abruft und die Anwendung / der Webserver die Zeilen nachträglich bearbeitet .
Persönlich ist mein SQL Server nicht übermäßig ausgelastet, daher war es vorzuziehen, die verschachtelten Unterabfragen zu verarbeiten.
quelle
Ich weiß, dass das OP um eine
mysql
Antwort bittet , aber da ich festgestellt habe, dass die anderen Antworten für mich nicht funktionieren,order by
Um Zeit für andere wie mich zu sparen, indizieren Sie die Zeile einfach, nachdem Sie sie aus der Datenbank abgerufen haben
Beispiel in PHP:
Beispiel in PHP mit Offset und Limit für Paging:
quelle