2011-01-20 118 views
2

我目前正在爲現有網站開發用戶消息傳遞系統(類似於Facebook)。我已經有了一個用戶表,現在只需要集成一個消息系統。用戶消息傳遞系統(PHP/MySQL)

我開始一個線程這種昨日(User messaging system)上,並取得了一些進展,但結構已改變了不少,所以我開始一個新的問題。

我想知道的基本上是什麼表結構應該是什麼樣子?要求如下:

  • 郵件在用戶之間交換,發件人可以發送郵件給多個收件人。

  • 信息顯示在一個線程式的佈局,作爲一個1-1的談話。即每個收件人的回覆將出現在其自己的線程中。

  • 一旦線程創建它會出現在發送者發送的郵件「文件夾 - 除非收件人發送回覆它不會出現在他們的收件箱。

  • 單個消息不能被刪除,但是一個線程可以被刪除。刪除線索不會刪除任何消息,只會從用戶的收件箱中刪除該線索(或「已發送消息」文件夾)。如果他/她還沒有從他/她的收件箱(或「已發送消息」文件夾)中刪除該線索,則其他用戶仍然可以訪問該線索。

  • 當發送郵件或回覆時,「讀狀態」設置爲「未讀」 - 但不應該影響到發送者。即只有收件人應該將其視爲「未讀」。

這裏是我的時刻:

 
Table messages 
============== 
id 
thread_id 
from_user_id 
subject 
body 
sent_date 

Table message_threads 
===================== 
id 
message_id 
to_user_id 
from_user_id 
read_status 

別的事情要考慮有關發送相同的消息時,給多個收件人,我們應該保存一個單獨的消息,爲每個收件人,或只是一條消息?

任何指導將不勝感激。

+2

多條消息會更好,更容易管理它們。 – Edmhs 2011-01-20 13:48:09

回答

2

我同意@Eddsstudio:當用戶發送一條消息把它的一個副本中的「發送文件夾」和副本收件人收件箱的。對於任何回覆:在主發件人收件箱中創建一條新消息,而不鏈接到之前的消息(即沒有鏈接到發送文件夾中的消息)。

可以使消息看起來更像他們顯示在屏幕給用戶,但在途中線程談話多個消息後端將創建少了許多麻煩。

0
$query = 'CREATE TABLE IF NOT EXISTS ' . $db->prefix . 'pm (
    `post_id` => $post->ID, 
    `role_id` => $role_id, 
    `sender` varchar(60) NOT NULL, 
    `recipient` varchar(60) NOT NULL, 
    `date` datetime NOT NULL, 
    `read` tinyint(1) NOT NULL, 
    `deleted` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) COLLATE utf8_general_ci;'; 

我相信有這種性質的結構會起作用。