如何在像facebook这样的web应用程序中实现线程消息

时间:2014-01-23 18:22:37

标签: php mysql sql facebook

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

下面是我的表格结构。 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

你可以看到我为用户25获得了2个主题,似乎我将使用上述查询为每个用户获得2个主题。

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

我应该更改表格结构吗?还是查询?

2 个答案:

答案 0 :(得分:0)

第一个突出显示的消息是因为您在查询中包含接收者:

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

第二个突出显示的邮件的发件人为18,因此也会包含其他未突出显示的邮件。

答案 1 :(得分:0)

你需要另一列,回复到msg-id,它跟踪消息回复的消息线程。

所以

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

新线程回复自己或0或null(取决于你想如何编码)

所有其他邮件都会回复邮件或新帖子。

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