用于消息和删除消息的mysql数据库逻辑

时间:2013-02-02 15:28:54

标签: php mysql

我目前坚持自己的逻辑。

我为snedimg消息创建了一个数据库表

messages看起来像这样

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

所以我完全坚持的是删除消息逻辑。 我不明白如何解决的问题是,假设user id 6获取消息,并通过id删除它,发送消息的人也不会看到它。< / p>

所以我在这方面有点失落,如果有人能给我一个逻辑提示我真的很开心

使用更详细的详细信息进行编辑

所以问题是

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

这是表格。用户收听邮件,阅读邮件,并出于某种原因想要删除邮件。

Probmel是DELETE LOGIC,我知道如何删除行,我不知道如何解决问题如果reciver删除邮件,发件人将能够在他/她删除时看到它它

例如在Facebook上他们使用存档而不是删除,这是我不理解的逻辑

2 个答案:

答案 0 :(得分:2)

在删除时只需将reciver或发送者ID设置为-1,如果两者都为-1(或将为-1),则在之后进行检查。

e.g。

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 :(得分:1)

如果您希望senderreceiver删除邮件后看到该邮件,则可以使用以下逻辑:

  1. 在名为deleted的表格中添加新列,其中值1表示邮件已被删除,0表示尚未删除。
  2. 如果这是receiver尝试查看其消息:WHERE deleted = 0
  3. 如果这是sender只显示全部;请勿使用上述WHERE条款。
  4. 用于删除消息,在PHP删除函数中首先检查deleted的值,如果是1,则可以使用SQL DELETE从表中永久删除该行。否则,您只需将deleted列的值更新为1
  5. 即可