2014-01-23 30 views
0

我需要使用php和mysql在我的web应用程序中实现线程消息。如何在Web应用程序中实现线程消息,如Facebook

下面是我的表格结构。 enter image description here

我正在使用下面的查询来选择登录用户的线程。

让我们考虑登录用户“18”比我的查询是。

SELECT `m1`.`message_id` AS `message_id` , `m1`.`receiver` AS `receiver` , `m1`.`sender` AS `sender` , `m1`.`message` AS `message`, `m1`.`read_status` AS `read_status` , `m1`.`rcvd_date_time` AS `rcvd_date_time` 
FROM (
`messages` `m1` 
LEFT JOIN `messages` `m2` ON ((
(
`m1`.`receiver` = `m2`.`receiver` 
) 
AND (
`m1`.`message_id` < `m2`.`message_id` 
)) 
) 
) 
WHERE ISNULL(`m2`.`message_id`) 
AND (
m1.sender =18 
OR m1.receiver =18 
) 
ORDER BY m1.rcvd_date_time DESC 

而我正在得到低于结果。 enter image description here

你可以看到我得到2个线程的用户25,看来我会得到2线程为每个用户使用上述查询。

任何人都可以帮我实施吗?

我应该需要更改表结构吗?或查询?

回答

0

您需要另一个列,reply-to-msg-id跟踪消息正在回复的消息线程。

所以

message_id 
in-reply-to-message-id 
receiver 
sender 

新帖给自己或0或空的(这取决于你想如何编写代码吧)

其他所有邮件回复邮件或新主题。

这不允许嵌套,顺便说一句。

+0

开始是的,所以首先我们需要使用接收者ID查询我们想要发送消息,如果消息与receiver_id存在message_id将被认为是in-reply-message-id(parent_id),如果不是,消息将被作为新线程输入,不是吗? –

+0

如果我理解你的评论,是的。如果没有'in-reply-to-message-id',那么这是一个新线程。否则,您可以递归地将相关消息抓取到多个级别的线程中,或将线程限制到单个级别。 – ssaltman

0

第一个高亮显示的消息是因为要包括在查询中的接收器:

AND (
m1.sender =18 
OR m1.receiver =18 
) 

第二亮的消息具有18的发送者,从而也与未突出的其余一起列入消息。

+0

是的,但对于第一亮点,如果不包括发件人messages_threads不会显示以登录用户 –

相关问题