Sortierung klappt nicht
Frank
- datenbank
0 wahsaga-1 pinguini0 Frank0 Vinzenz Mai
Hi,
ich find's nicht ... :(
MySQL Abfrage:
$result = mysql_query("select user_ID,Plz,COUNT(*),ltime from online WHERE start LIKE '$Datum[0]%' GROUP BY user_ID ORDER BY Plz ASC, ltime DESC") or db_die();
Es gibt z.B. folgende Datensätze:
ID - user_ID - Plz - start - ltime
1 - 12345 - 57723 - 2006-03-23 - 1143117636
2 - 12345 - 57723 - 2006-03-23 - 1143118636
3 - 12345 - 57723 - 2006-03-23 - 1143120636
Die Plz-Sortierung haut hin und
ich krieg die auch wunderbar gruppiert geliefert
und auch der Count stimmt.
Aber leider krieg ich nie den Datensatz 3 mit ltime = 1143120636
sondern immer den ältesten Datensatz (im Bsp.: 1 mit ltime = 1143117636)
(sofern der User 2x Online war)
Was mache ich falsch ?
Danke, Frank
hi,
Die Plz-Sortierung haut hin und
ich krieg die auch wunderbar gruppiert geliefert
und auch der Count stimmt.Aber leider krieg ich nie den Datensatz 3 mit ltime = 1143120636
sondern immer den ältesten Datensatz (im Bsp.: 1 mit ltime = 1143117636)
(sofern der User 2x Online war)Was mache ich falsch ?
Zuerst wird GROUPiert - aus allen Datensätze mit user_ID xy wird _genau einer_ ausgewählt - und zwar weitgehend zufällig.
Erst anschließend wird sortiert.
gruß,
wahsaga
wozu group ?
nimm limit= 1 und sortiere nach ltime desc
Hi Danke Ihr 2,
den Group brauche ich leider für den Count.
Und wenn erst gruppiert wird
OHNE die Sortierung zu beachten,
dann geht das so nicht, oder ?
Dann müsste ich alle Datensätze sortiert
nach Plz, user_ID, ltime einlesen
und mit $x++, den Count ermitteln.
Oder ?
Geht das besser ?
Danke, Frank
Hallo Frank,
MySQL Abfrage:
welche MySQL-Version. 4.1 ist für Subselects erforderlich
Die Plz-Sortierung haut hin und
weil für jede user_id die gleiche PLZ vorhanden ist.
ich krieg die auch wunderbar gruppiert geliefert
und auch der Count stimmt.
ja so ist das auch in anständigen DBMS, die eine Gruppierung nach _jeder_ Spalte ohne Aggregatsfunktion verlangen.
Aber leider krieg ich nie den Datensatz 3 mit ltime = 1143120636
sondern immer den ältesten Datensatz (im Bsp.: 1 mit ltime = 1143117636)
wie Dir die MySQL-Doku und wahsaga bereits sagten, bekommst Du einen zufälligen Datensatz. MySQL garantiert Dir _nicht_ den ältesten.
Einen Lösungweg unter MySQL >= 4.1.x findest Du z.B. im Archiv.
Freundliche Grüße
Vinzenz
Hi Vinzenz,
Danke !
Er wehrt sich noch ein bischen,
aber ich glaube, damit kriege ich ihn ...
Besten Dank, Frank