php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.11.2011, 13:32  
Neuer Benutzer
 
Registriert seit: 18.11.2011
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Fluku befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Bestes Resultat unter Berücksichtigung von mehr als einem Argument

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.
Fluku ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 18.11.2011, 13:36  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Fluku Beitrag anzeigen
ich erhalte aber ich erhalte zur max. Punktzahl die falsche Zeit und das Datum, wo der Benutzer erreicht hat.
Ja, verständlich – weil du Spalten selektierst, über die du nicht gruppiert hast.
Nach SQL-Standard ist das verboten, würde dir einen Fehler liefern; MySQL erlaubt es trotzdem, liefert dir dann aber „zufällige“ Werte für diese Spalten.

http://dev.mysql.com/doc/refman/5.0/...group-row.html
Mit einem dieser Ansätze die maximal erreichte Punktzahl je Benutzer ermitteln. Anschließend noch wie gewünscht sortieren.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 18.11.2011, 15:53  
Neuer Benutzer
 
Registriert seit: 18.11.2011
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Fluku befindet sich auf einem aufstrebenden Ast
Standard Subselect verwendet

Hallo

Danke für den Hinweis. Hab den Select nun wie folgt abgeändert:

SELECT benutzernamen, datum, punkte, zeit FROM user_quiz as s1
where punkte = (SELECT max(s2.punkte) from user_quiz where s2.benutzernamen = s1.benutzernamen)
GROUP BY benutzernamen
ORDER BY benutzernamen DESC, punkte DESC, zeit ASC;

Das resultat ist dann wie folgt:


Rang BENUTZERNAMEN Datumt 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 fluku 2011-11-13 20:42:37 5 00:35

Eigentlich genau das was ich will. Komisch ist nur, das mir wie in der Ausgangslage oben gezeigt der admin1 nicht ebenfalls angezeigt wird.

Sieht jemand woran das liegt?
Fluku ist offline   Mit Zitat antworten
Alt 18.11.2011, 15:56  
Neuer Benutzer
 
Registriert seit: 18.11.2011
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Fluku befindet sich auf einem aufstrebenden Ast
Standard

kleine korrektur: Bezüglich des oben genannten selects habe ich den alias s2 noch vergessen anzugeben. das resultat ist aber das selbe:

SELECT benutzernamen, datum, punkte, zeit FROM user_quiz as s1
where punkte = (SELECT max(s2.punkte) from user_quiz as s2 where s2.benutzernamen = s1.benutzernamen)
GROUP BY benutzernamen
ORDER BY benutzernamen DESC, punkte DESC, zeit ASC;

Was nun?
Fluku ist offline   Mit Zitat antworten
Alt 18.11.2011, 18:38  
Neuer Benutzer
 
Registriert seit: 18.11.2011
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Fluku befindet sich auf einem aufstrebenden Ast
Standard

Problem ist gelöst. Das oben stehende satement war richtig bzw. das Problem lag noch wo anders. Vielen Dank an Chris für seine Hilfe.

Gruss
Fluku ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Warning: mysql_fetch_array(): supplied argument is not ... Legende PHP Einsteiger 9 17.04.2011 12:29
Einkompiliertes Argument blockiert Start von MySQLd fritz_07 Server, Hosting und Workstations 1 02.08.2010 16:49
[Erledigt] PHP -> Ordner anlegen der sich auch beschreiben lässt?! Nightuser PHP Tipps 2008 13 30.06.2008 23:51
Warning: fwrite(): supplied argument is not a valid stream Venom PHP Tipps 2007 27 15.12.2005 18:14
mysql_result(): supplied argument is not a valid MySQL PHP Tipps 2005-2 4 25.08.2005 14:44
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
Problem mit 2 Fenstern - Ungültiges Argument HTML, Usability und Barrierefreiheit 6 26.07.2005 09:54
Fehlermeldung Missing argument 1 und 2 seven-12 PHP Tipps 2005-2 3 23.06.2005 16:05
[Erledigt] Warning: mysql_num_fields(): supplied argument is not a... Datenbanken 18 09.06.2005 21:03
ShowIt_V1.8.14 PHP Tipps 2005 1 23.03.2005 19:13
frage zum arbeiten mit dateien PHP Tipps 2005 21 01.03.2005 13:22


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum