SQL und Rangliste erzeugen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
[BUZ]
Mitglied
Beiträge: 21
Registriert: 17.01.2006 23:39

SQL und Rangliste erzeugen

Beitrag von [BUZ] »

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ß
OnFire
Mitglied
Beiträge: 207
Registriert: 26.07.2006 18:59
Wohnort: Paderborn
Kontaktdaten:

Beitrag von OnFire »

Hi

ich würde hier den Rang gar nicht speichern, den kann man sehr einfach aus den Punkten berechnen (bei der Ausgabe der Rangliste) z.B. mit ORDER BY Punkte DESC im MySQL-Query ;)

Gruß
OnFire
Gruß
OnFire
Il y a plus des choses à changer dans l'avenir que dans le passé.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

das DESC wird wohl heisen, von der grössten Zahl abwärts, stimmts?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Ja
KB:knigge
[BUZ]
Mitglied
Beiträge: 21
Registriert: 17.01.2006 23:39

Beitrag von [BUZ] »

@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)... :cry:

Gruß
Antworten

Zurück zu „Coding & Technik“