2012-01-07 151 views
2

我已經創建了一個使用PHP和mySQL的通知有點像Facebook的私人消息系統。私人消息通知 - 數據庫表設計

數據庫表具有以下字段(並非全部列出):

  • 郵件ID
  • senderUserID
  • RecUserID
  • 消息
  • 主題
  • 日期時間
  • 狀態 - 是否讀或不是
  • RepliedStatus - 我該如何使用它?
  • DeleteRec - 從收件箱中刪除
  • DelSender - 刪除發送方的收件箱
  • RepliedUserId - 當用戶回覆原單消息,這是改變接收器的id

所有答覆被存儲在第二表中,由於每個消息創建一個線程。第二個表看起來有點像這樣:

  • MESSAGEID - FK
  • repuserID
  • Mesage
  • 日期時間

目前時發出的新的消息給用戶i將消息的「狀態」更改爲未讀,從中可以運行計數查詢以列出通知中的所有未讀消息。

但是,如果用戶回覆該消息,我不能將原始'狀態'字段設置爲未讀,因爲這將出現在兩個用戶的通知。所以我創建了另一個名爲'RepliedStatus'的字段,但我不確定如何使用它來顯示消息回覆的通知?

謝謝你們。

回答

2

如果您有回覆表,那麼您的第一個狀態不需要回復狀態列。憑藉回覆表中已有的記錄,您知道用戶已回覆了郵件

+0

aah在回覆表中具有狀態的一個問題,兩個(發件人/收件人)用戶都將獲得通知,回覆像線程一樣對主消息有點像臉書。例如:用戶A向用戶B發送消息,用戶B回覆該消息,而不是用戶A回覆到同一消息等等,所有這些都在同一個消息中。 – TheDeveloper 2012-01-11 19:08:54

0

爲什麼不向第一個表(稱爲「messages」表)添加一個INT和一個可爲空的列,名爲「previous_message 「?

ALTER TABLE messages ADD COLUMN previous_message INT DEFAULT NULL; 

因此,每個消息將在同一個表中的前一個,你可以計算出序列。如果有幫助,你可以有一個具有相同定義的「next_message」列,並在回覆時更新相關記錄。

這樣做您可以在每個回覆中使用狀態列。

如果你想保持相同的數據庫組織,我會建議在第二個表上添加列狀態(讓我們說「回覆」)。

希望這有助於

0

我,我把刪除的列一次,同樣的事情在讀或不讀,如:

[{"0":"both", "1":"Sender", "2":"receiver"}]; 

然後取胎的消息,如:

$sql = "SELECT * FROM messagetreads 
WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].") 
AND deleted !== 0 
ORDER by TreadID AND DateTime ASC"; 

當發件人「刪除」是踩踏...如果刪除colomn爲2,數據庫中的所有tread relatedID更改爲1或0 ...

但我認爲這是更好地創造另一個colomn用於獲取的重複刪除,並通知數據,如

  • TreadID(FK_message_Table)
  • 刪除(0 =既刪除用戶名=不出現此發件人或接收器)
  • 通知(0 =同時讀取用戶名=讀該發送者或接收者)

然後,它的EZEE改變狀態或DELETE語句。

的選擇將是sometings這樣的:

$SQL = "SELECT * 
FROM messagetreads 
WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].") 
IN (SELECT TreadID WHERE delete !== (0 OR ".$_SESSION['MyCurrentId']."))"; 

如果是我們的會員ID在colomn涉及刪除所有的胎面不會出現,但如果是接收器的ID時,發送方將刪除0可以歸因於這兩個成員可以「刪除」該消息。同樣的事情通知!

很遠後一個cron作業可以來刪除閱讀(0)...

PS非常大的消息:這可能是通知系統太喜歡通知在牆上的新的信息或評論上的照片或日曆上的新事件...只需在列數據中添加更多信息,並使用php或java-ajaxed就可以添加更多信息...

+0

[隊列]:http://phpmaster.com/zend-queue/我發現有趣的通知方式來找到它是將消息的時間戳和成員訪問的時間戳存儲到message_tread中,並將它與一個並行像zend-queue doe's([PHP-MASTER上的zend-queue] [隊列] http://phpmaster.com/zend-queue/))。我也將參與者分隔到另一個表中,因爲我只想能夠將成員添加到消息消息中(就像Facebook一樣),並且所有行都包含上次訪問的時間戳,user_id,message_Tread_id – 2012-01-20 11:42:30