PHP私人消息(PM)系统

| 我正计划为我的用户制作一个PM系统,总体看来这很容易,但是从我看过的教程制作PM系统的方式来看,存在一个问题。 按照我计划的方式,将有几行,如user_from,user_to,然后消息-user_from将是发送方,并将在其发送消息中看到该消息,user_to将成为接收方,并将看到该消息。他的收件箱。但是,如果一个用户想要从其发送的文件夹中删除邮件,而另一个用户却不想从其收件箱中删除该邮件怎么办? 有什么简单的方法吗? 在Gmail和Facebook之类的对话中传递消息也可能很好,但这可能很难编写代码(感谢任何教程)?     
已邀请:
        您可以通过几种方法解决该问题,但是我可能会在表中添加几个标志(from_deleted,to_deleted): 而不是删除消息,而是将适当的标志更新为1。 列出邮件时,请过滤掉已标记的邮件。 您可以设置脚本,以便在标记后,如果两个字段都被标记,则实际上可以删除该行。     
        使用所谓的软删除。这意味着当一个记录被“删除”时,它实际上不会从数据库中删除,而是设置了一个删除标记,它允许您从用户界面中删除它,同时仍可以在需要时访问数据。因此,对于这种情况,您可以再创建两个名为user_to_delete和user_from_delete的列。当这些选项中的任何一个设置为true时,您将知道不在相应用户的收件箱/发件箱中显示该消息。祝好运。     
        我建议以下数据库设计:
MESSAGES
+----------+------------------+---------------------------+
|    id    |    subject_id    |    body                   |
+----------+------------------+---------------------------+

SUBJECTS
+----------+-------------+--------------+-----------------+
|    id    |    title    |    author    |    receivers    |
+----------+-------------+--------------+-----------------+

INBOX
+----------+---------------+--------------+---------------+
|    id    |    user_id    |    msg_id    |    read       |
+----------+---------------+--------------+---------------+

OUTBOX
+----------+---------------+------------------------------+
|    id    |    user_id    |    subject_id                |
+----------+---------------+------------------------------+
发送消息时,在收件箱表中为所有收件人创建一个新行,在发件箱表中为发件人创建一个新行。在消息表中,插入一行,其中包含主题ID和消息正文。在主题表中,插入一行标题,作者和所有收件人(如果发件人启动了新主题或转发了完整的对话或单个消息,或者使用现有的主题ID将消息添加到消息表中),即使接收者之一从他/她的收件箱中删除了一条消息,信息也会保留(在这种情况下,删除收件箱表中的行)。 对于发件箱,不需要\'read \'标志,请注意,仅使用主题ID。     
        另一种方法是添加两列,这些列将确定所有者或收件人是否已请求删除(隐藏)邮件。
owner_id | user_from | user_to | mailbox_folder | Message | Owner_hide | Recipient_hide
1          1           2         Sent             Hi         1           0
    
        是的,有一种简单的方法!还有另外两列,分别是
sender_deleted
receiver_deleted
。如果其中之一“删除”该消息,则您将列更新为例如1。显示消息时,请选择确保值不等于1的消息。等等。     
        您只需创建2行,然后添加一列。例:
owner_id | user_from | user_to | mailbox_folder | Message
1          1           2         Sent             Hi
2          1           2         Inbox            Hi
其他列:唯一的行ID,时间戳,主题行等。 然后,将根据owner_id列构建您的邮箱,并且每个用户都有自己的副本,可以根据自己的意愿移动/删除。 要添加对话,您可以添加一列或另一个表。如果是新邮件,请获取新的会话ID,否则请使用相同的ID。按时间戳查询。     
        您可以添加user_from_deleted和user_to_deleted行,并仅在未删除消息时显示消息。 要在对话中显示消息,您可以添加一个parent_id并显示所有具有相同parent_id的消息     
        PM系统比一张桌子要复杂一些。如果您的PM多于一个人怎么办? 在这种情况下,您需要多个表。一个用于用户,消息等。您可以使用主键和外键将它们链接起来。 尝试查找关系数据库。 这应该使您开始: http://www.databasejournal.com/sqletc/article.php/1469521/Introduction-to-Relational-Databases.htm     

要回复问题请先登录注册