Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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 - Fatal编程技术网

Mysql 查询以仅显示每个线程的最新消息

Mysql 查询以仅显示每个线程的最新消息,mysql,sql,Mysql,Sql,环境PHP 5.3.5 phpMyAdmin 3.3.9 正在尝试创建一个通过用户的消息活动进行筛选的查询。活动将根据最近添加的消息显示最近的线程。所以我必须考虑用户是接收者还是发送者。 我有一个结构化的查询,但是我在对线程进行分组时遇到了很大的困难。当我对线程进行分组时,最新活动的顺序将丢失 以下是捕获最后10条消息的正确顺序的查询和结果,但存在重复的线程ID。我只想根据消息发送日期显示最近的线程 SQL查询: SELECT m.date_sent, m.thread_id, m.messa

环境PHP 5.3.5 phpMyAdmin 3.3.9

正在尝试创建一个通过用户的消息活动进行筛选的查询。活动将根据最近添加的消息显示最近的线程。所以我必须考虑用户是接收者还是发送者。

我有一个结构化的查询,但是我在对线程进行分组时遇到了很大的困难。当我对线程进行分组时,最新活动的顺序将丢失

以下是捕获最后10条消息的正确顺序的查询和结果,但存在重复的线程ID。我只想根据消息发送日期显示最近的线程

SQL查询:

SELECT m.date_sent, m.thread_id, m.message_id, m.sender_id,
  upub2.firstname as sender_name, mr.recipient_id,
  upub1.firstname as recipient_name
FROM message AS m
  JOIN message_recipient AS mr ON mr.message_id = m.message_id
  JOIN user_public_info AS upub1 ON upub1.user_public_info_id = mr.recipient_id
  join user_public_info AS upub2 ON upub2.user_public_info_id = m.sender_id
WHERE ((m.senderDelete IS NULL OR m.senderDelete = 0) AND m.sender_id = 2 ) OR
  ((mr.is_delete IS NULL OR mr.is_delete = 0 ) AND mr.recipient_id = 2)
ORDER BY m.message_id;
结果:

date_sent           thread_id   message_id  sender_id   sender_name     recipient_id    recipient_name
2013-10-09 14:31:50     106         113             1               John             2          Mark
2013-10-09 14:30:50     107         112             2           Mark             1          John
2013-10-09 14:30:31     106         111             2           Mark             1          John
2013-10-09 09:49:58     112         110             1           John             2          Mark
2013-10-09 09:20:24     108         106             1           John             2          Mark
2013-10-07 15:46:15     107         105             1           John             2          Mark
2013-10-07 14:40:25     103         104             1           John             2          Mark
2013-10-07 14:39:37     103         103             1           John             2          Mark
2013-10-07 14:36:34     107         102             2           Mark             1          John
2013-10-07 14:36:07     106         101             2           Mark             1          John
2013-10-07 14:35:29     105         100             2           Mark             1          John
2013-10-07 12:32:50     104         99          2           Mark             1          John
2013-10-07 12:15:43     104         98          2           Mark             1          John
2013-10-07 11:46:36     104         97          2       Mark             1          John
2013-10-07 11:43:32     104         96          1           John             2          Mark
2013-10-07 11:43:17     104         95          1           John             2          Mark
2013-10-07 11:27:14     103         94          1           John             2          Mark
我想要的是:

date_sent           thread_id   message_id  sender_id   sender_name     recipient_id    recipient_name
2013-10-09 14:31:50     106         113             1       John             2          Mark
2013-10-09 14:30:50     107         112             2           Mark             1          John
2013-10-09 09:49:58     112         110             1           John             2          Mark
2013-10-09 09:20:24     108         106             1           John             2          Mark
2013-10-07 14:40:25     103         104             1           John             2          Mark
2013-10-07 14:35:29     105         100             2           Mark             1          John
2013-10-07 12:32:50     104         99          2           Mark             1          John
这可以在一个查询中完成,还是应该基于第一个查询的结果创建另一个查询


感谢所有能帮助我解决此查询的人……

您的各种数据集、查询和结果似乎彼此不一致,因此有点难以理解,但我怀疑您是在寻找类似的东西

 SELECT m.message_id m_id
      , m.sender_id s_id
      , m.thread_id t_id
      , m.subject
      , m.message
      , m.date_sent
      , s.firstname sender
      , r.firstname recipient
   FROM message m
   JOIN message_recipient n
     ON n.message_id = m.message_id
   JOIN user_public_info s
     ON s.user_public_info_id = m.sender_id
   JOIN user_public_info r
     ON r.user_public_info_id = n.recipient_id
   JOIN (SELECT thread_id, MAX(max_message_id) max_message_id FROM message GROUP BY thread_id)x
     ON x.thread_id = m.thread_id AND x.max_message_id = m.message_id;

关于获得“Y”的“Top N”“X”的问题是SO中最常见的问题之一。也许你的搜索太具体了。现在看看这个sqlfiddle。希望我很快会有东西给你:)@草莓的链接已经在帖子中提供了。确切的数据库结构不完全正确,因为sqlfiddle声明只允许使用一个主键。@GolezTrol您能帮我指出正确的方向吗。我将不胜感激。我将改进我的搜索,搜索你的Y的前N X。这里提供的数据集是否与小提琴中给出的数据集一致?谢谢。我以前从来没有问过这样的问题,所以我重新编写了我最初的帖子,删除了细节。我还放入了我希望结果是什么样子。请看一看,希望它更清楚。谢谢:)如果只看用户1的活动,那就是John。我只想要活动线程的消息。3-10-10 10 14:31:10 10 10 10 10 10 10 10 10 14:14:31:50(约翰约翰·约翰·约翰·简·JaJa