前段時間做個小東西,涉及到消息的軟刪除。比如A和B之間發的消息存到一張表中,A可以刪除自己收件箱中的這條消息,但是這條消息還存在B的收件箱中,直到B也刪除這條消息。比如張三和李四用手機發短信,張三清空自己的收件箱之后,不影響李四的收件箱。
其實,做軟刪除,只不過是設置一個標志位而已,比如,0表示未刪除,1表示刪除。而我的需求是實現到底誰刪除了。
數據庫設計如下:
id 消息id
uid_from 發送方id
uid_to 接收方id
message 消息內容
sendtime 發送時間
isdel 是否刪除,默認值為0
實現方法為:
如果是發送方刪除消息,則用1|isdel(注:| 表示異或),如果接收方刪除消息,則用2|isdel,
原始isdel為0,
如果只有發送方刪除消息,則isdel變為1,
如果只有接收方刪除消息,則isdel變為2,
如果發送方和接受方都刪除了,則isdel變為3。
sql語句如下:
1 update user_letter set isdel = isdel | (if(uid_from = $userid),1,2)) 2 where $id = id and $userid = uid_from or $userid = uid_to
$id表示消息id,$userid 表示用戶id,通過if語句判斷,用戶id是該消息的發送方還是接收方,即if(uid_from = $userid),1,2),if語句通過PHP傳到mysql是可以運行的,已測試過。
小弟水平有限,歡迎各位吐槽。
