Vinzenz Mai: Ranking-Funktion bei MySQL?

Beitrag lesen

Hallo globe,

für eine Gesamtausgabe wurde dir bereits gesagt, dass du dies am Besten in der Programmiersprache deiner Wahl machst.

das ist nicht erforderlich.

Für eine Abfrage eines einzelnen Users (d)ein Ranking zu ermitteln ist nicht machbar.

Das ist je nach vorhandener MySQL-Version sehr wohl machbar.
Der erste Schritt besteht in der Berechnung des Ranges. Das wurde hier im Forum bereits mehrfach besprochen und ist durch den Einsatz von Benutzervariablen lösbar.

set @a = 0;  
SELECT  
    @a := (@a + 1) rang,  
    benutzer,  
    zahl  
FROM tabelle  
    ORDER BY zahl;  

Nun hätte Steffen das ganze gern nach user sortiert:

set @a = 0;  
SELECT  
    r.benutzer,  
    r.zahl,  
    r.rang  
FROM ( SELECT  
    @a := (@a + 1) rang,  
    benutzer,  
    zahl  
FROM tabelle ) r  
ORDER BY r.benutzer  

sollte es ab MySQL 4.1.x tun. Ein Index auf die Spalte zahl ist wichtig, dann bleibt nur das Sortieren nach der Spalte benutzer im äußeren Query als Performanceproblem übrig. MySQL 4.1.x wird für das Subselect benötigt, das Setzen der Benutzervariablen muss in der gleichen Verbindung erfolgen.

Freundliche Grüße

Vinzenz