Det är faktiskt inte sant. Det kommer att returnera en slumpmässig rad. I praktiken är detta ofta den första raden i primärnyckelordning, men det finns ingen garanti. Andra databaser än MySQL tillåter inte denna praxis och kommer att skapa ett fel.
Hur som helst, ett sätt att hämta högsta ID för olästa meddelanden är att gå med i meddelandetabellen två gånger. Den andra anslutningen letar bara efter olästa meddelanden. Till exempel:
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