Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按成员名称划分的mySQL组_Php_Mysql - Fatal编程技术网

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