2013-02-02 46 views
1

我目前堅持我的邏輯。mysql數據庫邏輯消息和刪除消息

我創建了一個數據庫表snedimg消息

messages看起來像這樣

id | sender_id | reciver_id | msg      | send_date | 
1 | 2   | 6   | hello there i am testing | 2013-01-15 

那麼我完全套牢是移除該消息的邏輯。 這個問題我不明白如何解決是,讓我們說userid 6得到的消息,並通過ID刪除它,這樣誰發送消息將無法看到它。

所以我有點在此丟失,如果有人可以給我一個提示上的邏輯我會很樂意與其它方式的說明細節

EDIT所以問題是

id | sender_id | reciver_id | msg      | send_date | 
1 | 2   | 6   | hello there i am testing | 2013-01-15 

這是表格。用戶收到郵件,讀取郵件並出於某種原因想要將其刪除。

Probmel是DELETE LOGIC,我知道如何刪除行,我不知道如何解決問題,如果reciver刪除郵件,發件人將能夠看到它,他/她刪除它。

例如在Facebook上,他們使用的存檔,而不是刪除,這是什麼邏輯是什麼我不明白

+0

該消息應該被複制,添加列類型= ENUM('sent','received') – 2013-02-02 15:30:43

+1

如何添加兩列'active_for_sender'和'active_for_reciver',然後爲活動添加一個非零值,不活躍或「刪除」 – Cjueden

+0

對我而言不夠明確。爲什麼你想刪除該消息? –

回答

2

只需設置reciver或發件人ID爲-1的缺失,有一個檢查之後,如果兩者都是-1(或者是-1)刪除那一排。

例如

on deletion by reciver: 
if ($sender_id == -1) { 
    $query = "DELETE FROM messages WHERE id=$id"; 
} else { 
    $query = mysql_query("UPDATE messages SET reciver_id=-1 WHERE id=$id"; 
} 
mysql_query($query) 

這樣,這將是仍然速效,直到兩個刪除

編輯:
您既可以設置爲-1,而不是在刪除它:
該解決方案
正如附加思想第二次用戶刪除,所以你得到了一種歸檔,並通過cronjob刪除了舊的。

1

,如果你想sender看到它是由receiver刪除後也會消息,您可以使用以下邏輯:

  1. 添加一個新列到你的餐桌命名爲deleted,其中值1意味着信息已被刪除,並0意味着它沒有被刪除。
  2. 如果是這樣的receiver嘗試看看他們的消息:WHERE deleted = 0
  3. 如果是這樣的sender簡單地顯示所有;不要使用上面的WHERE條款。
  4. 用於刪除郵件,在您的PHP刪除函數中首先檢查deleted的值,如果是1,您可以使用SQL DELETE從您的表中永久刪除該行。否則,你只需要deleted列的值更新爲1