2010-08-08 52 views
-4

我目前已經設計了一個使用這樣簡單的表格簡單發送消息接收消息的系統。 現在我需要一個額外的信息,即哪個消息屬於哪個對話。 關於實現這種系統的任何想法提示或指導?實現會話風格的私人消息系統

 
CREATE TABLE messages (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    FromID INT NOT NULL, 
    ToID INT NOT NULL, 
    Deleted BOOLEAN DEFAULT FALSE, 
    SentDeleted BOOLEAN DEFAULT FALSE, 
    Subject varchar(255), 
    Message varchar(255), 
    DateTime DATETIME          
    ) ENGINE=InnoDB; 
+0

「SentDeleted BOOLEAN DEFAULT FALSE」是什麼意思? – Alexandre 2012-01-16 09:49:05

回答

2

更常見的方法是擁有一個線程表和消息表。當一個會話開始時,創建一個線程記錄並將消息記錄的thread_id列設置爲它。將所有回覆的thread_id也設置爲該線程。這樣,你可以選擇* FROM消息,其中thread_id = x

+0

我喜歡這個,實際上,讓我試試看,謝謝。 我應該在對話表中保存什麼樣的額外信息? 唯一ID WhoInitiatedConversation WhenWasItInitiated 或者我真的只需要一個列ID? – user391986 2010-08-08 19:31:31

+0

這可能是最直接的方式。如果你在這裏額外的信息,這將是你可以輕鬆搜索。例如,如果你想列出一個收件箱的所有對話,你可以只是 選擇*從線程在哪裏user_id = x 所以我會存儲date_created,user_id,主題 – 2010-08-08 21:18:47

+0

當然還有一個自動增量id – 2010-08-08 21:19:14

3

只需添加一個名爲parent_message_id的int列並將其設置爲您要回復的消息的ID。

+1

我喜歡它。您可以使用一些遞歸進行數據庫查詢。這將是史詩般的。 – mattbasta 2010-08-08 04:53:28

+0

哈哈,我以前做過。 – 2010-08-08 05:46:28

+0

如果我爲特定對話的每個連續消息使用這個額外的parent_id,那麼父母會成爲第一個初始消息還是在對話之前的第一個初始消息? – user391986 2010-08-08 19:29:48