SQL und Rangliste erzeugen
Verfasst: 09.01.2007 15:03
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ß
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ß