如何在网站中实现消息功能

时间:2012-06-12 13:32:09

标签: mysql sql message

我有一张桌子

____________________________________________________________
|                         Message                           |
|___________________________________________________________|
| Sender  |  Message    |    Receiver       |   message_id  |   
| John    | How Are You?|      Will         |       1       |
|_________|_____________|___________________|_______________|

In Will计算机我显示如下

Message By:John
Message:How Are You?

现在假设John删除了这条消息但我无法删除记录,因为Will尚未删除。因此我正在运行更新查询

Update Message Set Sender='' where message_id=1;

但在执行此操作之后,计算机消息将如下更改

 Message By:                    //Because i have changed sender to null
    Message:How Are You?

现在我怎样才能克服这个无法获得所需输出的错误

4 个答案:

答案 0 :(得分:1)

其他答案的替代方案(两者都可以肯定有效)将是一个单独的“收件箱”表。只是链接了哪些邮件仍然在其收件箱中的内容,例如:

__________________________
|        INBOX           |
|________________________|
| User    |  Message_id  |  
| John    |       1      | 
| Will    |       1      | 
|_________|______________|

然后当John删除邮件时,您从收件箱表中删除该行:

__________________________
|        INBOX           |
|________________________|
| User    |  Message_id  |  
| Will    |      1       | 
|_________|______________|

这种方式也很好,因为它将构成消息的元数据与有关存储位置的信息,人们采取的行动等分开。

答案 1 :(得分:1)

只需维护另外两列boolean is_deleted(true/false) and deleted_by(S/R)以保持邮件状态被删除( true或false )和deleted_by(发件人或接收者)。

答案 2 :(得分:0)

添加单独的布尔值Read By Sender和Read By Reciever列并更新那些而不是实际的发送者/接收者

答案 3 :(得分:0)

只需添加两个(枚举)列来指示谁已删除该消息。

然后,为了显示消息,请在WHERE子句中确保相应的值尚未设置。

在任何情况下都会保留SenderReceiver列,以便您可以输出所有邮件信息并将邮件附加到正确的用户。