Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich hab eine Datenbank mit den spalten userid, timestamp, punkte und in diese Datenbank wird jetzt in unregelmässigen Abständen ein neue Zeile mit Informationen über den Punktestand eines jeweiligen users, identifiziert anhand seiner id zum aktuellen zeitpunkt eingetragen. Jetzt will ich quasi eine Art Highscore ausgeben und hab keine Ahnung wie ich da ansetzen soll... Ich hoffe ich finde hier Hilfe ;)

Danke...

Geschrieben

Ein Highscore über alle Datensätze oder soll nur der maximale wert eines Users verwendet werden? Soll der Highscore alle user beinhalten oder z.B. nur die 10 besten? Welche DB (Hersteller) verwendest Du?

Dim

Geschrieben

Ich verwende eine MySQL Datenbank wo ich mit PHP drauf zugreife...

Ich brauche im Prinzip eine Tabelle als Ausgabe die in der einen Spalte die Userid und in der anderen Spalte die Punkte stehen, allerdings sortiert nach Punkte absteigend... Die Punkte zur jeweiligen Userid sind immer die des letzten Timestamps!

Ums mal "einfacher" auszudrücken:

Gib mir alle userids und punkte, sortiert nach timestamp bzw. Punkte, allerdings keine userid doppelt...

Is irgendwie schwierig zu erklären, aber hoffe das is verständlich :)

Nur die ersten 10 könnte ich ja dann über ein Limit lösen...

Danke schonmal für Antworten ;)

Geschrieben

das sollte es sein:

SELECT
t1.*
FROM
punktetabelle as t1
WHERE
t1.timestamp = (
SELECT
MAX(timestamp)
FROM
punktetabelle as tsub
WHERE
tsub.userid = t1.userid
GROUP BY
tsub.userid
)
ORDER BY
t1.timestamp
LIMIT
10[/PHP]

Ted

Geschrieben

Danke für deine Mühe, aber leider bringt das irgendwie nicht das richtige ergebniss... Ich geb mal ein Beispiel an:

tabelle usperpoints mit columns userid, timestamp, punkte

zeile 1: 1234, 1.1.09, 100

zeile 2: 4321, 2.1.09, 120

zeile 3: 3214, 3.1.09, 150

zeile 4: 1234, 4.1.09, 180

zeile 5: 4321, 3.1.09, 80

sollte als ausgabe folgendes haben:

zeile 4

zeile 3

zeile 5

Geschrieben
Danke für deine Mühe, aber leider bringt das irgendwie nicht das richtige ergebniss... Ich geb mal ein Beispiel an:

tabelle usperpoints mit columns userid, timestamp, punkte

zeile 1: 1234, 1.1.09, 100

zeile 2: 4321, 2.1.09, 120

zeile 3: 3214, 3.1.09, 150

zeile 4: 1234, 4.1.09, 180

zeile 5: 4321, 3.1.09, 80

sollte als ausgabe folgendes haben:

zeile 4

zeile 3

zeile 5

achja aender ma

ORDER BY

t1.timestamp

in

ORDER BY

t1.punkte

um :D

edith: evtl musst du noch die richtung mit angeben, aber ich verwechsel immer ASC und DESC von daher hab ichs einfach weggelassen :>

Ted

Geschrieben (bearbeitet)

Die Frage ist nun, kann es an einem Tag mehrere Sätze eines Spielers geben?

Wenn ja, dann wäre die Anforderung, dass keine doppelte Spielersätze ausgegeben werden sollen, mit Teds Statement nicht erfüllt. Und das weil der Timestamp ohne Uhrzeit gespeichert wird.

In dem Fall müsste man noch zusätzlich nach der höchsten Tagespunktzahl suchen und zwar gruppiert nach Spieler Id und Datum.

Im Subselect muss in dem fall eigentlich keine group by Klausel sein.

Hier mal mein Vorschlag (da kein mysql zur Verfügung ungetestet)

SELECT  ups.userid

       ,ups.TIMESTAMP

       ,MAX(ups.punkte)

  FROM  userpoints ups 

 WHERE  ups.TIMESTAMP = (SELECT  MAX(ups2.TIMESTAMP)

                           FROM  userpoints ups2

                          WHERE  ups.userid = ups2.userid) 

GROUP BY ups.userid

        ,ups.TIMESTAMP

ORDER BY MAX(ups.punkte) desc

Edit: Das ist aber keine wirkliche Highscoretabelle sondern eine "Lastscore"-Tabelle. ;-)

Bearbeitet von dimikar
Geschrieben

Wenn ja, dann wäre die Anforderung, dass keine doppelte Spielersätze ausgegeben werden sollen, mit Teds Statement nicht erfüllt. Und das weil der Timestamp ohne Uhrzeit gespeichert wird.

Oha gar nich drauf geachtet... denn er hat geschrieben "timestamp" und timestamp = sekunden seit 1.1.1970

Zeitstempel ? Wikipedia

aber gut das es noch leute gibt die aufpassen ;)

Ted

Geschrieben

Hehe ja das mit dem Timestamp hatte ich auch am Anfang gedacht

aber dann wurden die Satzbeispiele gepostet. Du kannst nichts dafür Ted.

Wobei wir es immer noch nicht wissen ob es mehrere Sätze pro Spieler und pro Datum geben kann. Wenn nicht dann tut es deine Abfrage auch. ;)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...