2013-11-14 69 views
0

我建立了類似Facebook信息的信息系統。會話是在一個MySQL表中進行的,所以我有receiverId, senderId, messageContent ... 我的問題是,我想實現'刪除消息'功能,但我不知道如何製作它,所以如果該會話的一個成員刪除所有消息,則另一個成員仍應該看到所有消息,直到其他成員也刪除這些消息。對話般的信息系統

所以我的辦法(明顯的錯誤之一)是添加附加列:deletedByReceiver和deletedBySender,該工程確定爲接收器,但如果發送者打開這些郵件,然後他只看到他發信息,因爲我的查詢說:select * from inbox where deletedByReceiver != 1

所以我不問代碼,我要求知道如何解決這個

+0

也許一些message_visiblilty表message_id,user_id。當你不希望能夠看到它時,將用戶從表格中移除。 –

+0

要麼保留每個消息的兩個副本,一個發送者和一個接收者,或者保留單獨的「deletedByX」字段以指示發送者和/或接收者何時刪除它。 –

+0

這是一個Codeigniter庫,但您可以查看sql並查看如何設置您的模式來處理此問題:http://codebyjeff.com/blog/2013/02/mahana-messaging-library // https:/ /github.com/jrmadsen67/Mahana-Messaging-library-for-CodeIgniter – jmadsen

回答

0

你所需要的發送者和接收者不同的查詢:

  • 的接收器(如你所提到的)select * from inbox where deletedByReceiver != 1
  • 發件人使用select * from inbox where deletedBySender != 1
0

如果你想每一個人用戶能夠在自己的視圖中刪除的消息,看來你需要添加創建的消息和用戶之間的關聯表,與messageId, userId。表格中的一行表示該消息已被該用戶刪除。您也可以使此表更通用,並具有deleted列(是/否)。這樣,你也可以管理權限等...

2

如果我理解問題的權利,你只需要「或」在一起的兩組條件。如果我是發件人和deleteBySender != 1,或者我是收件人和deleteByReceiver!=1,則需要包含該消息。

因此,像:

SELECT * FROM inbox 
WHERE 
    (senderId = <MYID> AND deleteBySender!=1) OR 
    (receiverID = <MYID> and deleteByReceiver!=1) 

其中,當然,<MYID>被觀察者的用戶ID替換。

0

我會使用兩個表系統,一個用於消息,另一個用於收件箱。它會增加你的數據庫的大小,但它允許總是存在的消息,但收件人,從他們的觀點中刪除

信息表:

MSGID * | senderId | messageContent | TS

收件箱表:

ID * | msgid_fk | recipientId

讀您的消息:

SELECT * FROM郵件男加入我的收件箱ON m.msgid = i.msgid_fk WHERE recipientID = '[收件人]'

你可以然後爲發件人刪除郵件時創建一個觸發器,同時將其刪除收件人收件箱。這也將允許多個收件人在存儲消息的同時接收相同的消息。