Я использую этот запрос для получения списка того, кто послал сообщение пользователю или кому пользователь отправил сообщения.
SELECT messages.* FROM ( SELECT MAX(lastseen) AS lastseen FROM messages WHERE '".$user."' IN (from,to) GROUP BY IF ('".$user."' = from,to,from) ) AS latest LEFT JOIN messages USING(lastseen) ORDER BY lastseen desc,(read='no' and to='".$user."') limit 10
Это работает, однако, он показывает некоторых пользователей дважды.
Каков правильный способ показать пользователя только один раз?
Я думаю, что это то, что тебе нужно.
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
просто замените «Tom» на вашу переменную
Это вернет последних 10 пользователей, отправленных в «Tom» или «Tom».