Seite 1 von 2

mySQL - besondere Sortierung

Verfasst: 16.01.2009 23:49
von gnasen
Hi,
für mein derzeitiges Projekt nutze ich eine mySQL Datenbank, auf der bestimmte Daten zu bestimmten Usern hinterlegt werden. In diesem Fall eine Highscore.

Das Problem ist folgendes, ich habe eine DB, in der folgendes liegen soll:

UserID, (für diesen Thread unwichtiges Zeug), Punkte, Rang

UserID und Punkte sind befüllt. Der Rang soll sich aus den Punkten ergeben, also wer die meisten Punkte hat, soll hier die 1 bekommen, der mit den zweitmeisten die 2 usw.

Die Frage ist, wie bekomme ich das hin, wie würde der Querry lauten um die Rang spalte zu füllen?
Oder gibt es vllt noch einen performanteren Weg?
Meine Kenntnisse in mySQL beschränken sich auf die absolute Basis, daher hielft mir jeder Tipp!

Danke schonmal,
gnasen

Verfasst: 16.01.2009 23:57
von Kaeru Gaman
also ohne jegliche speziellen mySQL-Kenntnisse trotzdem mal meinen Senf dazugegeben...

ich würde den RANG nicht in den Datensatz dazuschreiben, sondern nur an die ausgabe-tabelle, und die datensätze nach score sortieren.

Verfasst: 17.01.2009 00:12
von STARGÅTE
richtig.

Einfach das aufrufen:

"SELECT * FROM ... ORDER BY Punkte"

und dann sind die "Sortiert" den Rang kannst du ja dann selber mit php oder so an hand des Datensatz dazu machen ...

Verfasst: 17.01.2009 00:14
von edel
Den Rang kannst du eigentlich auch weglassen wenn du ORDER BY mit rein nimmst.

Verfasst: 17.01.2009 00:26
von gnasen
wenn ich orderby nutze, wie bekomme ich dann raus, welchen Rang UserXY hat, ohne die ganze Tabelle auszulesen? Ich möchte auch nur einen einzelnen auslesen können.

Verfasst: 17.01.2009 01:17
von KeyKon
Mitzählen ;-)
Wenn du zum Beispiel von Platz 30 bis 40 auslesen willst machste das ungefähr so:

Code: Alles auswählen

SELECT * FROM ... ORDER BY 'score' DESC LIMIT 30,10
Und zählst dann beim ausgeben einfach von 30 aufwärts mit...

Verfasst: 17.01.2009 01:19
von STARGÅTE
mit Count:

meine Punkte ermitteln:
SELECT Punkte FROM ... WHERE Name = "blabla"



Meinen Rang ermitteln
SELECT Count(*) FROM ... WHERE Punkte > MeinePunkte

wenn also 2 besser sind kommt als Ergebnis 2 also bist du dann 3.

Verfasst: 17.01.2009 01:44
von KeyKon
Ach, so war die Frage gemeint...

Verfasst: 17.01.2009 22:57
von gnasen

Code: Alles auswählen

SELECT Count(*) FROM ... 
funktioniert wunderbar, danke dafür!

Verfasst: 19.01.2009 23:45
von chrizl
Mal ne andere Frage dazu.

Was ist, wenn nun zwei User die gleiche Punktzahl haben??
Dann hast doch den Schlamassel, dass du dort dann auch noch ne extra Abfrage starten musst.

Ich hoffe, du machst die Abfrage mit PHP und weisst auch, was du machen musst.

Denn wenn du nun 3 Leute hast, die die gleiche Punktzahl hast, wären die ja eigentlich auf dem gleichen Rang.
Und soll der nächste dann z. B. auf Rang 4 oder soll der dann auf Rang 2?
Denn wenn die der 4. in der Runde nun auf Rang 2 ist, müsstest du noch ein GROUP BY mit einbringen oder halt die Auflistung per PHP so generieren.

Naja, es sei denn, ich verzäle mich gerade irgendwie.