Tôi nghĩ đây là điều bạn đang theo đuổi.
SELECT messages.*
FROM
(SELECT MAX(lastseen) AS lastseen,IF ('Tom' = `from`,`to`,`from`) as otheruser FROM messages
WHERE 'Tom' IN (`from`,`to`) GROUP BY otheruser
)
AS latest INNER JOIN messages ON latest.lastseen = messages.lastseen
AND (('Tom' = messages.from AND latest.otheruser = messages.to)
OR
('Tom' = messages.to AND latest.otheruser = messages.from))
ORDER BY messages.lastseen
DESC,`read`='no' limit 10
chỉ cần thay thế 'Tom' bằng biến của bạn
Thao tác này sẽ trả về 10 người dùng mới nhất đã gửi tin nhắn cho 'Tom' hoặc 'Tom' được gửi tin nhắn tới.