mySQL - besondere Sortierung

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

mySQL - besondere Sortierung

Beitrag 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
pb 4.51
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Den Rang kannst du eigentlich auch weglassen wenn du ORDER BY mit rein nimmst.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag 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.
pb 4.51
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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...
(\/) (°,,,°) (\/)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Ach, so war die Frage gemeint...
(\/) (°,,,°) (\/)
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Code: Alles auswählen

SELECT Count(*) FROM ... 
funktioniert wunderbar, danke dafür!
pb 4.51
Benutzeravatar
chrizl
Beiträge: 60
Registriert: 31.08.2004 15:03
Wohnort: Pbg.
Kontaktdaten:

Beitrag 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.
Mit freundlichen Grüßen,
chrizl
Antworten