我有一个消息表
messages
--------------
user_id_from (int)
user_id_to (int)
text (varchar)
date (datetime)
isRead (boolean)
我希望获取用户的邮件活动,其中收件箱和发件箱位于一个列表中(与Facebook邮件相同)。我想为我联系的每个用户收到最后一条消息。我试着这样做:
让我们说这是我的数据
user_id_from user_id_to text date isRead
100 101 "text1" 2011/1/1 0
101 100 "text2" 2011/1/2 0
100 102 "text3" 2011/1/5 0
这是我的疑问:
select *
from Message m
where m.user_id_to = 100
or m.id in
(select m2.id
from Message m2
where m2.user_id_from = 100
and m2.user_id_to != m.user_id_from
)
group by m.user_id_from, m.user_id_to
此查询为我提供了用户100所在的完整消息。
我该怎么做?
答案 0 :(得分:1)
这需要您跟踪消息中的“线程”,或者您也可以将它们称为对话。每次发送邮件时,都会收到conversation_id。然后,创建一个user_conversation_subscriptions表。向某人发送消息会启动一个新的对话,发送者和接收者是唯一的参与者,但他们可以邀请人们加入对话。然后,您可以通过对话分组新消息,以查看您在哪些对话中收到了新消息,这就是它在Facebook上的工作方式。