我有一个消息表,可以正常使用收件箱,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)
现在如何为发件人的用户列出最新消息?
答案 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