2014-01-23 61 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不會顯示以登錄用戶 –

相關問題