如何设置对话历史记录和处理已删除的邮件

时间:2011-05-23 04:11:56

标签: php mysql

Backgroun:我正在尝试使用转换视图在Mysql中构建一个私人消息系统。

我有一个msg_received tbl,看起来像这样

id   from_member_id  to_member_id   message_id
1    123                 456               101
2    456                 123               102
3    123                 456               103
4    456                 123               103

所以当userA(id:123)查看他的转化历史时;他看到他发送给userB的2条消息(id:456)和他从userB收到的2条消息(id:456)。所以他总共看到4条消息。对于userB也是如此;他总共看到4条消息。

问题是我想允许userA删除其中一条消息。让我们说他想删除msg_id 103.所以现在userA只能看到3条消息。

问题是当userB尝试查看转义历史记录时;他也只看到3条消息而不是4条消息。这是因为他没有删除任何消息,并希望看到完整的历史记录。

你们可以提供任何提示吗?

4 个答案:

答案 0 :(得分:1)

添加2个标记:deleted_by_senderdeleted_by_recipient

当只有一个用户“删除”时 - 设置approproate标志。当两个标志= 1时 - 物理删除记录。

此外 - 现在您需要在AND deleted_by_recipient = 0

中添加WHERE条件

答案 1 :(得分:1)

在名为hide_from的表中找一列,

check the sample table for reference

假设我们为用户提供了两个唯一的ID, 例如那些ID是2和5,在你的聊天表中,你有2个from_id以及to_id和vise-e-versa。

如果用户2删除聊天线程,则在hide_from中插入2, 现在,如果用户5删除聊天线程,则检查hide_from是否为NULL&& hide_from = 2,删除2&的所有消息5

答案 2 :(得分:0)

一种简单的方法是为“from_user_deleted”和“to_user_deleted”添加两列,然后在显示消息列表时尊重这些列(并在设置两个标志时进行清理。)

答案 3 :(得分:0)

添加一个标志状态,让您可以按住:

0 - 未读

1 - 阅读

2 - 由发件人删除

3 - 被收件人删除

4 - 垃圾邮件等