Mysql
 sql >> Base de données >  >> RDS >> Mysql

Problème MySQL GROUP BY/ORDER BY

Ce n'est pas vrai. Il renverra une ligne aléatoire. En pratique, il s'agit souvent de la première ligne dans l'ordre des clés primaires, mais il n'y a aucune garantie. Les bases de données autres que MySQL ne permettent pas cette pratique et généreront une erreur.

Quoi qu'il en soit, une façon de récupérer l'ID le plus élevé des messages non lus consiste à joindre deux fois la table des messages. La deuxième jointure ne recherche que les messages non lus. Par exemple :

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