【问题标题】:How to Implement Message feature in website如何在网站中实现消息功能
【发布时间】:2012-06-15 09:38:31
【问题描述】:

我有一张桌子

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

在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?

现在我该如何克服这个没有得到想要的输出的错误

【问题讨论】:

  • 当约翰删除他的消息时,为什么你要威尔去删除??当我在 Skype 上向 Mr.X 发送一些消息并删除该消息时,来自 Mr.X 窗口的消息也会被删除。
  • 我想他可能是在用“deleted”来表示“close”
  • @Somebodyisintrouble : 在 facebook 中,如果 Mr.X 向 Mr.Y 发送消息,然后删除它,它就会从两者中删除。
  • @Somebodyisintrouble :让我在 facebook 上测试一下……你的意思是消息……对吗?不发帖...

标签: mysql sql message


【解决方案1】:

只需再维护两列boolean is_deleted(true/false) and deleted_by(S/R) 来维护消息状态deleted(true 或false)和deleted_by(Sender 或Receiver)。

【讨论】:

    【解决方案2】:

    其他答案的替代方案(两者肯定都可以)是有一个单独的“收件箱”表。只是将哪些邮件仍在谁的收件箱中关联起来的东西,例如:

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

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

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

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

    【讨论】:

    • 你知道这会导致数据冗余
    • 我怎么知道谁发了谁收到了
    • @Somebodyisintrouble 这如何引入冗余?而且您会知道谁从 OP 问题的消息表中发送和接收。我会告诉你,在最简单的情况下,你可以辩称它是矫枉过正的,但它也是最干净/最规范的。
    • 哦,这条消息是 id,我认为您收件箱表中的消息列是消息
    • @Somebodyisintrouble 哦,是的,这只是 id。我将把答案编辑得更清楚=)
    【解决方案3】:

    添加单独的布尔 ReadBySender 和 ReadByReciever 列并更新它们而不是实际的发送者/接收者

    【讨论】:

    • 我目前也在做同样的事情,所以这里没有别的办法了吗?
    • 这个解决方案有什么问题?
    • 我不想在此表中附加两列
    • 您可以将已读回执保存在一个完全独立的表中,但这比此解决方案的开销更大。通常,您不应尝试从单个列中获取多个功能。它会导致错误和难以理解的代码。
    • 当然,还有其他完全不依赖数据库来发送消息的解决方案,但我假设已经跨越了桥梁
    【解决方案4】:

    只需包含另外两个(枚举)列来指示谁已经删除了该消息。

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

    无论如何保留SenderReceiver 列,以便您可以输出所有消息信息并将消息附加给正确的用户。

    【讨论】:

    • iam 目前也在做同样的事情,所以这里没有别的办法了吗?
    • @Somebodyisintrouble 我没有看到任何其他可行的方法。
    猜你喜欢
    • 2014-11-28
    • 2011-04-21
    • 2021-04-22
    • 2010-09-07
    • 1970-01-01
    • 2011-10-24
    • 2021-08-30
    • 2018-08-22
    • 2021-09-21
    相关资源
    最近更新 更多