前段时间做个小东西,涉及到消息的软删除。比如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是可以运行的,已测试过。
小弟水平有限,欢迎各位吐槽。