从表中选择消息

时间:2011-10-15 15:21:42

标签: mysql sql select

我有一个消息表

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所在的完整消息。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

这需要您跟踪消息中的“线程”,或者您也可以将它们称为对话。每次发送邮件时,都会收到conversation_id。然后,创建一个user_conversation_subscriptions表。向某人发送消息会启动一个新的对话,发送者和接收者是唯一的参与者,但他们可以邀请人们加入对话。然后,您可以通过对话分组新消息,以查看您在哪些对话中收到了新消息,这就是它在Facebook上的工作方式。