我有消息表格式如下:从信息表中查询对话
+------------------------------------------------------------------+
| id|sender_id| recipient_id | message_text |created_at |
+------------------------------------------------------------------+
| 1 | 2 | 10 | "test1" |"2017-04-10 09:05:45" |
| 2 | 10 | 2 | "test2" |"2017-04-10 09:05:47" |
| 3 | 2 | 4 | "test3" |"2017-04-10 09:05:49" |
| 4 | 10 | 4 | "test4" |"2017-04-10 09:05:51" |
| 5 | 4 | 2 | "test5" |"2017-04-10 09:05:53" |
| 6 | 2 | 10 | "test6" |"2017-04-10 09:05:58" |
+------------------------------------------------------------------+
我想要做的就是让所有的“对话”一登录的用户(比如ID为2的用户) ,以及该对话的最后消息。 我设法拔出用户用户2的ID的拥有与使用此查询消息:
select distinct users.id
from messages, users where
(recipient_id = 2 and users.id = sender_id)
or
(sender_id = 2 and users.id = recipient_id);
这是什么产生是
4
10
为用户2已经无论是从这两个人发送和/或接收的消息(test1, test2, test6
对于10
和test3, test5
对于4
)。
我不能做的就是修改这个查询,从而也产生了由产生的ID发送或接收的最后一条消息 - 例如
4 | test5
10 | test6
这确实给了我几乎所需的结果,但我需要最近的消息而不是他们的日期。如果我只是添加消息文本进行选择,那么您使用日期所做的部分仍然正确,但我收到的消息与日期不匹配。我喜欢这个方法,你能不能解释一下你是如何得到这个解决方案的? – hpdobrica
修改后的查询就像一个魅力!我真的很想听听你在那里做了些什么,我不想只是复制/粘贴它哈哈:) – hpdobrica
@hpdobrica我给了你一个更深的解释。 –