如何在对话视图中获取消息?

时间:2011-12-27 10:05:27

标签: mysql sql

我有一个消息表,可以正常使用收件箱,sent_items和存档等。

但是客户希望消息在对话视图中。

这是我的消息表结构,

Field             Type  
id                int(11) 
from_fb_uid       varchar(45)
to_fb_uid         varchar(45)
message_body      text
sent_datetime     datetime
read_status       tinyint(1)
archived          tinyint(1)

首先,我需要显示最新的(基于用户观看的每个对话的唯一消息)对话消息。

当我点击对话消息时,我需要将所有消息显示为对话视图。

一旦我知道接收&发件人在对话中,我使用以下查询来获取基于sent_time的消息列表(以保持对话视图)..

SELECT * FROM `user_message` 
WHERE 
(from_fb_uid='100002638144690' and to_fb_uid='100002564538409') 
or 
(from_fb_uid='100002564538409' and to_fb_uid ='100002638144690') 
order by 
sent_datetime desc

但我不知道如何获取新会话列表并在会话主题中列出最新消息......

怎么做?

更新

我用两个实体

修改了表结构
 user_conversation table

    Field                          Type     

    conversation_id                int(11)
    sender_id_user                 int(11)
    sender_fb_uid                  varchar(45)
    receiver_id_user               int(11)
    receiver_fb_uid                varchar(45)
    sender_archive_status          tinyint(1)
    receiver_archive_status        tinyint(1)
    last_updated                   timestamp

 user_message table

    Field             Type  

    id                int(11) 
    from_fb_uid       varchar(45)
    to_fb_uid         varchar(45)
    message_body      text
    sent_datetime     datetime
    read_status       tinyint(1)
    archived          tinyint(1)

现在如何为发件人的用户列出最新消息?

1 个答案:

答案 0 :(得分:0)

您可以使用子查询查找最近的10个对话。您必须加入以找到message_body以获取最新消息。

select  um.from_fb_uid
,       um.to_fb_uid
,       um.message_body 
from    user_message um
join    (
        select  from_fb_uid
        ,       to_fb_uid
        ,       max(sent_datetime) as max_dt
        from    user_message um2
        group by
                from_fb_uid
        ,       to_fb_uid
        order by
                max(sent_datetime) desc
        limit   10
        ) as filter
on      filter.from_fb_uid = um. from_fb_uid
        and filter.to_fb_uid = um. to_fb_uid
        and filter.max_dt = um.sent_datetime