我需要使用php和mysql在我的web应用程序中实现线程消息。
下面是我的表格结构。
我正在使用以下查询为登录用户选择线程。
让我们考虑登录用户“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
我的结果低于结果。
你可以看到我为用户25获得了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(取决于你想如何编码)
所有其他邮件都会回复邮件或新帖子。
这不允许嵌套,顺便说一句。