Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
mysql-查询具有特定条件的消息的线程列表_Mysql_Sql_Database - Fatal编程技术网

mysql-查询具有特定条件的消息的线程列表

mysql-查询具有特定条件的消息的线程列表,mysql,sql,database,Mysql,Sql,Database,我有三个表:用户、请求和消息。我想得到android/ios消息应用程序启动时显示的线程列表 用户 id username 1 a 2 b 3 c id用户名 1A 2 b 3 c 请求 id 1 2 3 身份证件 1. 2. 3. 消息 Id request_id sender_id receiver_id message timestamp 1 1 1 2 asd 2013-06-10 06:45 2 1 1

我有三个表:用户、请求和消息。我想得到android/ios消息应用程序启动时显示的线程列表

用户

id username 1 a 2 b 3 c id用户名 1A 2 b 3 c 请求

id 1 2 3 身份证件 1. 2. 3. 消息

Id request_id sender_id receiver_id message timestamp 1 1 1 2 asd 2013-06-10 06:45 2 1 1 3 sdf 2013-06-10 06:42 3 2 1 1 dfg 2013-06-10 06:41 4 2 1 2 fgh 2013-06-11 06:40 5 2 1 2 ghj 2013-06-12 07:45 6 2 2 1 jkl 2013-06-10 06:45 7 3 3 1 zxc 2013-06-10 03:45 8 3 3 1 xcv 2013-06-10 05:45 Id请求\u Id发送方\u Id接收方\u Id消息时间戳 1 1 2 asd 2013-06-10 06:45 2 1 3自卫队2013-06-10 06:42 3 2 1 dfg 2013-06-10 06:41 4 2 1 2 fgh 2013-06-11 06:40 52112GHJ 2013-06-1207:45 jkl 2013-06-10 06:45 7 3 1 zxc 2013-06-10 03:45 2013年6月10日05时45分 我想得到的是这样的东西:

线程

request_id sender_name receiver_name last_message last_timestamp 1 a b asd 2013-06-10 06:45 1 a c sdf 2013-06-10 06:42 2 a b ghj 2013-06-12 07:45 2 a a dfg 2013-06-10 06:41 3 c a xcv 2013-06-10 05:45 请求\u id发送方\u姓名接收方\u姓名最后\u消息最后\u时间戳 1AB asd 2013-06-1006:45 1a c自卫队2013-06-1006:42 2GHJ 2013-06-12 07:45 2 a dfg 2013-06-10 06:41 3 c a xcv 2013-06-10 05:45 这里,请求\ id+发送方\ id+接收方\ id对于每一行和最后一条\消息都是唯一的,最后一条\时间戳显示消息表中的最新条目。订单将是最后一个时间戳降序。如何获取此表?

您需要,可以通过将
消息
表连接到一个子查询来找到,该子查询标识每个组的标识(最大)时间戳:

SELECT   Message.request_id,
         Sender.username   AS sender_name,
         Receiver.username AS receiver_name,
         Message.message   AS last_message,
         Message.timestamp AS last_timestamp
FROM     Message NATURAL JOIN (
           SELECT   request_id,
                    sender_id,
                    receiver_id,
                    MAX(timestamp) timestamp
           FROM     Message
           GROUP BY request_id, sender_id, receiver_id
         ) t
    JOIN User Sender   ON   Sender.id = Message.sender_id
    JOIN User Receiver ON Receiver.id = Message.receiver_id
ORDER BY Message.request_id, last_timestamp DESC
在电视上看

请注意,我的结果集的顺序与问题中的预期顺序不同,原因如下:

你说“顺序将是代码> ListTimeTimePuth[<代码>降序],但是在给定的示例中,消息<代码> GHJ (在所有其他消息之后发送两天)不仅出现在所有记录的中间,而且出现在所有具有相同的<代码>请求程序ID /代码>的中间。请澄清结果集所需的排序顺序


你说“顺序将是代码> ListTimeTimePopys<代码>降级”,但是在给定的示例中,消息>代码> GHJ '/Cuth>(在所有其他消息之后发送两天)不仅出现在所有记录的中间,而且出现在所有具有相同的<代码>请求程序ID /代码>的中间。请澄清结果集所需的排序顺序?谢谢,它工作起来很有魅力。我不知道天然木料的用途,你说得对。我订购那张样品台时出错了。但话说回来,那张桌子是手工制作的。所以错误可能会发生。但你说得对,我还有一个问题。从您的列表中,我发现了重复的结果(第3行和第4行)。在这种情况下,发送方和接收方id已经互换。但我只想要一个(最新的一个)。我该怎么做呢?@AlamKanak:这有点乱,伸缩性不好,但你可以像这样使用
LEAST()
grest()。如果可能的话,我更倾向于在表中再添加一到两列,这样就可以在不做额外工作的情况下识别对话的参与者。