Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL GROUP BY/ORDER BY problema

In realtà non è vero. Restituirà una riga casuale. In pratica, questa è spesso la prima riga nell'ordine della chiave primaria, ma non vi è alcuna garanzia. Database diversi da MySQL non consentono questa pratica e genereranno un errore.

Ad ogni modo, un modo per recuperare l'ID più alto di messaggi non letti è unire due volte la tabella dei messaggi. Il secondo join cerca solo i messaggi non letti. Ad esempio:

SELECT  max(msg.ID) as MaxID
,       messages.from
,       max(unread.ID) as MaxUnreadID
,       users.userName
FROM    users
join    messages msg
on      users.ID = msg.from
        and messages.to = ?
left join    
        messages unread
on      users.ID = unread.from
        and messages.to = ?
        and unread.read = 0
GROUP BY
        users.ID
,       users.userName