Hallo,
ich möchte für Sportseite eine Rangliste erzeugen. Dazu habe ich eine Tabelle spieler in folgender (vereinfachter) Form:
personId | Punkte | Rang
-----------------------------
1567 | 123 | 1
1568 | 101 | 2
1569 | 99 | 3
1570 | 87 | 4
1571 | 87 | 4
1572 | 22 | 5
Jetzt möchte ich per SQL einer Person Punkte geben und gegebenfalls die Ränge neu berechen ohne alle Persohnen per PHP abzuackern.
Mein Lösungsansatz in etwa:
- aktuelle_Punkte zur Person aus DB holen
- neue_Punkte = aktuelle_Punkte + x, berechnen
- prüfen ob weitere Personen mit aktuelle_Punkte in DB
- prüfen ob weitere Personen mit neue_Punkte in DB
folgende Möglichkeiten abarbeiten (a, b, c, d):
a.) Einfacher Rang aktuelle_Punkte UND einfacher Rang neue_Punkt
UPDATE spieler SET punkte=neue_Punkte WHERE personId='whatever';
UPDATE spieler SET rang=rang+1
WHERE punkte < neue_Punkte AND punkte > aktuelle_Punkte;
b.) Doppelter Rang aktuelle_Punkte UND einfacher Rang neue_Punkt
usw...
c.) Einfacher Rang aktuelle_Punkte UND doppelter Rang neue_Punkt
usw...
d.) Doppelter Rang aktuelle_Punkte UND doppelter Rang neue_Punkt
usw..
Hat jemand für das Problem etwas in der Schublade oder kennt jemand einen schlaueren Weg?
Gruß
SQL und Rangliste erzeugen
@OnFire:
Das geht leider nicht. Die Rangliste ist nicht nur ein "einfaches" sortieren und durchzählen. Siehe Rang 4! Gleiche Punkte bedeuten auch gleicher Rang. Geil wäre sogar: Rang: 1, 2, 3, 4, 4, 6 ...
Das Rangvergeben per PHP ist keine Lösung (dauert zu lang). Die Ränge nicht zu speicher bedeutet, sofern ich einem Spieler seinen Rang anzeigen möchte, muss ich bis zu seiner Position zählen (umständlich, dauert zu lang)...
Gruß
Das geht leider nicht. Die Rangliste ist nicht nur ein "einfaches" sortieren und durchzählen. Siehe Rang 4! Gleiche Punkte bedeuten auch gleicher Rang. Geil wäre sogar: Rang: 1, 2, 3, 4, 4, 6 ...
Das Rangvergeben per PHP ist keine Lösung (dauert zu lang). Die Ränge nicht zu speicher bedeutet, sofern ich einem Spieler seinen Rang anzeigen möchte, muss ich bis zu seiner Position zählen (umständlich, dauert zu lang)...

Gruß