Row Table mit left join als order by bzw group by

SELECT
u.id,
u.name,
u.onl,
u.image,
f.tstamp
FROM userdata AS u
LEFT JOIN messages AS f ON (u.id=f.user_id) OR (u.id=f.friend_id)
WHERE u.id IN
    (
        SELECT CASE
        WHEN user_id=’".$uid."’
        THEN friend_id
        ELSE user_id
        END FROM friends
        WHERE
        (
            user_id=’".$uid."’ or friend_id = ‚".$uid."‘
        )
        and type=2
    )
GROUP BY u.id
ORDER BY f.tstamp ASC, u.onl DESC, u.name

Code ist glaube ich selbst erklärend.
Folgendes problem, bekomme als ausgabe des tstamp (timestamp) nur die älteste anstatt die neuste, die anderen ausgaben sind aktuell.

Hallo ,

eine Fehlerquelle könnte die Problematik mit GROUP BY und ORDER BY
in Kombination sein .

Haben wir mehrere Datensätze

Thomas 1
Thomas 2
Ingo 1
Ingo 2
Tim 2
Tim 3

dann ist erst der GROUP BY zu machen , hier GROUP BY name

folglich haben wir

Thomas 1
Ingo 1
Tim 2

Das Sortieren wirkt sich erst jetzt aus

ORDER BY zahl ASC

somit bleibt das bei

Thomas 1
Ingo 1
Tim 2

machen wir ORDER BY zahl DESC

entsteht z.b.

Tim 2
Thomas 1
Ingo 1

Es ist also nicht so das erst Sortiert wird und dann ein GROUP gemacht wird .

was dann schönerweise sowas ergeben würde

Tim 3
Thomas 2
Ingo 2
!falsch>

und deswegen bekommst du warscheinlich nur den ersten eintrag (also das älteste datum zu gesicht) , die frage wäre ob überhaupt die daten im datensatz genauso wie in der ansicht sind .

Noch ein Beispiel :
Bei GROUP BY Funtion z.b. für einen MAX wert

name | wert | datum
Thomas | 35,00 | 4.11.2011
Thomas | 37,00 | 4.12.2012

SELECT name,MAX(wert),datum FROM test GROUP BY name ORDER BY datum desc

kommt sowas wie

Thomas 37,00 4.11.2011

Alle Zeilen werden zusammen gefasst
Da Name gleich ist und der MAX Wert eingesetzt wird fällt es da nicht auf , aber Datum ist nicht gleich und da bleibt nur das erste Datum übrig , das wäre aber ein Fehler . denn
richtig wäre

Thomas 37,00 4.12.2012