Php 按成员名称划分的mySQL组
我正在使用此查询获取向用户发送消息或向用户发送消息的用户的列表Php 按成员名称划分的mySQL组,php,mysql,Php,Mysql,我正在使用此查询获取向用户发送消息或向用户发送消息的用户的列表 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 B
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”发送消息的用户。我尝试了你的代码,但结果完全相同。你说的同一用户两次是什么意思?它将显示向用户“Tom”发送消息或从用户“Tom”发送消息的不同名称。除非您的同一用户在同一秒(时间)向Tom发送了两次消息,否则您可能希望使用max(id),其中id是消息的自动递增id,而不是max(lastseen)。请参阅
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