मुझे लगता है कि आप यही चाहते हैं।
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
बस 'टॉम' को अपने वेरिएबल से बदलें
यह उन नवीनतम 10 उपयोगकर्ताओं को लौटाएगा जिन्होंने 'टॉम' या 'टॉम' को संदेश भेजा है।