Hallo,
ich habe eine MySQ-Tabelle mit einer Bestenliste. Bei einem Online-Quiz-Spiel kann jeder hier einen Eintrag mit seinem Namen und dem Highscore hinterlassen.
Die Tabelle sieht vereinfacht so aus:
|| ID_highscore | spielername | letzterUpdate | startzeit | id_schwierigkeitsstufe | joker1_verwendet | joker2_verwendet ||
ID_highscore enthält die ID als Integer
spielername ist ein String
letzterUpdate, startzeit sind UNIXTIMESTAMP
id_schwierigkeitsstufe ein Integer zwischen 1 ... 15
joker1/2_verwendet sind boolean-Werte
So viel zur Struktur. Meine Abfrage soll nun die 20 besten Spieler auflisten und dazu angeben, wie lange sie gebraucht haben und welche Joker alles verwendet wurden.
Sortiert wird die Liste nach
Meine bisherige Abfrage sieht so aus:
Das funktioniert super. Jetzt kommt es allerdings häufig vor, dass ein bestimmter Spieler (immer mit dem gleichen Spielernamen) alle ersten 10 Plätze belegt. Ich will ihn aber nur EINMAL in der Liste haben, und zwar an dem höchsten Platz, den er sich erarbeitet hat.
Ich verzweifle also daran, dass ich den vierten Punkt nicht in meine Abfrage reinbekomme:
Ach ja - mittlerweile sind über 40.000 Einträge in der Datenbank, darum sollte die Abfrage auch noch möglichst performant sein ;-)
Hat irgend wer eine gute Idee?
Danke und Grüße,
Skipy
ich habe eine MySQ-Tabelle mit einer Bestenliste. Bei einem Online-Quiz-Spiel kann jeder hier einen Eintrag mit seinem Namen und dem Highscore hinterlassen.
Die Tabelle sieht vereinfacht so aus:
|| ID_highscore | spielername | letzterUpdate | startzeit | id_schwierigkeitsstufe | joker1_verwendet | joker2_verwendet ||
ID_highscore enthält die ID als Integer
spielername ist ein String
letzterUpdate, startzeit sind UNIXTIMESTAMP
id_schwierigkeitsstufe ein Integer zwischen 1 ... 15
joker1/2_verwendet sind boolean-Werte
So viel zur Struktur. Meine Abfrage soll nun die 20 besten Spieler auflisten und dazu angeben, wie lange sie gebraucht haben und welche Joker alles verwendet wurden.
Sortiert wird die Liste nach
- Größte ereichte Schwierigkeitsstufe
- Kürzeste benötigte Zeit für das Spiel
- Letzter Spieler als als erstes auflisten
Meine bisherige Abfrage sieht so aus:
Code:
SELECT id_highscore, spielerName, letzterUpdate AS zeitpunkt, (letzterUpdate-startzeit) AS spieldauer, id_maxSchwierigkeitsttufe AS maxFrage, joker1_verwendet, joker2_verwendet FROM highscore h1 WHERE id_maxSchwierigkeitsttufe > 0 ORDER BY maxFrage DESC, spieldauer ASC, zeitpunkt DESC LIMIT 20;
Ich verzweifle also daran, dass ich den vierten Punkt nicht in meine Abfrage reinbekomme:
- Jeder Spielername nur einmal anzeigen
Ach ja - mittlerweile sind über 40.000 Einträge in der Datenbank, darum sollte die Abfrage auch noch möglichst performant sein ;-)
Hat irgend wer eine gute Idee?
Danke und Grüße,
Skipy
Comment