Frank: Sortierung klappt nicht

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

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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. wozu group ?

    nimm limit= 1 und sortiere nach ltime desc

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

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

    1. Hi Vinzenz,
      Danke !

      Er wehrt sich noch ein bischen,
      aber ich glaube, damit kriege ich ihn ...

      Besten Dank, Frank