sortowanie group by + order by

0

Witam, mam pytanie

mam taka tabelke

uzytkownik | wiadomosc | data

Thomas | helloo jak sie masz | 2016-03-09 1227.000000

Benjamin | hiii whatsup | 2016-03-09 1227.000000

Benjamin | fine thx | 2016-03-09 1226.000000

Thomas | super sie mam | 2016-03-09 1225.000000

Thomas | ja rowniez | 2016-03-09 1224.000000

SELECT uzytkownik,wiadomosc,data FROM messages GROUP by uzytkownik ORDER by data DESC;

cel jest taki aby grupowalo uzytkownikow, ale wyswietlało najnowszą wiadomość a nie tak jak to robi teraz wyświetla najstarszą..

czyli teraz zwraca taki wynik

Thomas - ja rowniez - 2016-03-09 1224.000000
Benjamin - fine thx - 2016-03-09 1226.000000

jak zmodyfikowac zapytanie aby zwracało najnowszą wiadomość a nie tak jak teraz zwraca najstarszą ? dziekuje za pomoc

0
 SELECT uzytkownik,wiadomosc,DATA FROM messages GROUP BY uzytkownik ORDER BY DATA ASC;

Równie dobrze, mógłbyś zapisać:

 SELECT uzytkownik,wiadomosc,DATA FROM messages GROUP BY uzytkownik ORDER BY DATA;
0
EroSanin napisał(a):
 SELECT uzytkownik,wiadomosc,DATA FROM messages GROUP BY uzytkownik ORDER BY DATA ASC;

Równie dobrze, mógłbyś zapisać:

 SELECT uzytkownik,wiadomosc,DATA FROM messages GROUP BY uzytkownik ORDER BY DATA;

niestety nadal zwraca najstarszą.

0

Najpierw wykonaj sortowanie (w podzapytaniu), a grupowanie na końcu.

0

i to jest właśnie ta cudowność mysqla - grupowanie po jednej kolumnie, sortowanie po innej a wyświetlanie jeszcze innej. To nie ma prawa działać.

select * from messages where (uzytkownik, data) in (select uzytkownik, max(data) data from messages)

albo

select * from messages m1 join (select uzytkownik, max(data) data from messages) m2 on m1.uzytkownik = m2.uzytkownik and m1.data = m2.data

1 użytkowników online, w tym zalogowanych: 0, gości: 1