Hallo zusammen
Ich hab eine Rangliste mit folgendem unten stehendem Aufbau. Nun möchte ich nur das Beste Resultat eines Benutzers in der Rangliste anzeigen und zwar so, dass nebst der max. erreichten Punktzahl auch noch die gemessene Zeit berücksichtigt wird. Das heisst bei gleicher Punktzahl eines Benutzers soll die schnellere Zeit über den nächst höheren Rang entscheiden.
Unter Berücksichtigung von nur einem Argument ist dies mit dem GROUP Statement auf den Benutzernamen und dem Anwenden der max()-funktion auf die Punktzahl kein Problen.
Das Problem liegt aber daran, dass die zugehörige Zeit in der Rangierung auch noch berücksichtigt werden soll. Das heisst, in der Ausgabe wird der erste gespeicherte Datensatz genommen und und die max Punktzahl des Benutzers angezeigt, jedoch die falsche Zeit ( und Datum).
Beispiel der Ausgangslage (Select ergibt unten stehende Liste, soweit Okay):
SELECT benutzernamen, datum, punkte, zeit FROM user_quiz
ORDER BY benutzernamen DESC, punkte DESC, zeit ASC;
Rang BENUTZERNAMEN Datum Punkte Zeit
1 fluryk 2011-11-13 21:21:41 6 00:22
2 admin1 2011-11-13 21:28:45 5 00:19
3 admin2 2011-11-01 12:06:40 5 00:33
4 fluku 2011-11-13 20:42:37 5 00:35
5 admin2 2011-11-13 21:19:22 5 00:46
6 admin1 2011-11-01 22:27:30 4 00:30
7 admin1 2011-11-01 16:16:25 4 00:34
8 admin1 2011-11-01 22:32:24 2 00:32
9 fluku 2011-11-05 18:51:39 0 00:00
10 admin1 2011-11-04 01:05:01 0 00:00
11 admin1 2011-11-01 22:53:15 0 00:00
Ziel (bestes Resultat unter Berücksichtigung der Punktzahl und Zeit).
Grundsätzlich Okay aber, ich erhalte aber ich erhalte zur max. Punktzahl die falsche Zeit und das Datum, wo der Benutzer erreicht hat.
SELECT benzuternamen, datum, punkte, zeit FROM user_quiz
GROUP BY benutzernamen
ORDER BY benutzernamen DESC, punkte DESC, zeit ASC;
Rang BENUTZERNAMEN Datum Punkte Zeit
1 fluryk 2011-11-13 21:21:41 6 00:22
2 admin2 2011-11-01 12:06:40 5 00:33
3 admin1 2011-11-04 01:05:01 5 00:00
4 fluku 2011-11-05 18:50:51 5 00:19
Wie komme ich zum richtigen Ergebnis?
Für eine Hilfe wäre ich echt dankbar.
Ich hab eine Rangliste mit folgendem unten stehendem Aufbau. Nun möchte ich nur das Beste Resultat eines Benutzers in der Rangliste anzeigen und zwar so, dass nebst der max. erreichten Punktzahl auch noch die gemessene Zeit berücksichtigt wird. Das heisst bei gleicher Punktzahl eines Benutzers soll die schnellere Zeit über den nächst höheren Rang entscheiden.
Unter Berücksichtigung von nur einem Argument ist dies mit dem GROUP Statement auf den Benutzernamen und dem Anwenden der max()-funktion auf die Punktzahl kein Problen.
Das Problem liegt aber daran, dass die zugehörige Zeit in der Rangierung auch noch berücksichtigt werden soll. Das heisst, in der Ausgabe wird der erste gespeicherte Datensatz genommen und und die max Punktzahl des Benutzers angezeigt, jedoch die falsche Zeit ( und Datum).
Beispiel der Ausgangslage (Select ergibt unten stehende Liste, soweit Okay):
SELECT benutzernamen, datum, punkte, zeit FROM user_quiz
ORDER BY benutzernamen DESC, punkte DESC, zeit ASC;
Rang BENUTZERNAMEN Datum Punkte Zeit
1 fluryk 2011-11-13 21:21:41 6 00:22
2 admin1 2011-11-13 21:28:45 5 00:19
3 admin2 2011-11-01 12:06:40 5 00:33
4 fluku 2011-11-13 20:42:37 5 00:35
5 admin2 2011-11-13 21:19:22 5 00:46
6 admin1 2011-11-01 22:27:30 4 00:30
7 admin1 2011-11-01 16:16:25 4 00:34
8 admin1 2011-11-01 22:32:24 2 00:32
9 fluku 2011-11-05 18:51:39 0 00:00
10 admin1 2011-11-04 01:05:01 0 00:00
11 admin1 2011-11-01 22:53:15 0 00:00
Ziel (bestes Resultat unter Berücksichtigung der Punktzahl und Zeit).
Grundsätzlich Okay aber, ich erhalte aber ich erhalte zur max. Punktzahl die falsche Zeit und das Datum, wo der Benutzer erreicht hat.
SELECT benzuternamen, datum, punkte, zeit FROM user_quiz
GROUP BY benutzernamen
ORDER BY benutzernamen DESC, punkte DESC, zeit ASC;
Rang BENUTZERNAMEN Datum Punkte Zeit
1 fluryk 2011-11-13 21:21:41 6 00:22
2 admin2 2011-11-01 12:06:40 5 00:33
3 admin1 2011-11-04 01:05:01 5 00:00
4 fluku 2011-11-05 18:50:51 5 00:19
Wie komme ich zum richtigen Ergebnis?
Für eine Hilfe wäre ich echt dankbar.

Kommentar