前段时间做个小东西,涉及到消息的软删除。比如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是可以运行的,已测试过。

 

小弟水平有限,欢迎各位吐槽。

 

posted on 2013-06-07 23:36  什么玩  阅读(2252)  评论(22编辑  收藏  举报