Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Hilfe bei sortierter Abfrage

Empfohlene Antworten

Veröffentlicht

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...

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 ;)

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

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

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

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

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

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. ;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.