PHP私人消息(PM)系统

时间:2011-06-13 21:38:46

标签: php mysql private-messaging

我打算为我的用户制作一个PM系统,整体看起来很容易,但是我看到教程制作PM系统的方式有一个问题。

在我计划工作的方式中,会有像user_from,user_to这样的行,然后消息 - user_from将是发送者,并且将在他的发送消息中看到消息,user_to将是接收者并将看到收件箱中的邮件。但是,如果用户想要从其发送的文件夹中删除邮件,但其他用户不想将其从收件箱中删除,该怎么办?

有没有简单的方法呢?

将消息放在会话中也很好,比如Gmail和Facebook,但这可能很难编码(任何教程都很受欢迎)?

8 个答案:

答案 0 :(得分:5)

使用所谓的软删除。这意味着当记录被“删除”时,它实际上从未从数据库中删除,而是将一个标志设置为delete,允许您从用户界面中删除它,同时在需要时仍可访问数据。因此,对于这种情况,您可以创建另外两个名为user_to_delete和user_from_delete的列。当其中任何一个设置为true时,您将知道不在相应用户的收件箱/发件箱中显示该消息。古德勒克。

答案 1 :(得分:4)

您可以通过几种方式解决问题,但我可能会在表格中添加几个标记(from_deleted,to_deleted):

  • 不是删除邮件,而是将相应的标志更新为1。
  • 列出邮件时,过滤掉已标记的邮件。
  • 您可以设置脚本,以便在标记后,如果两个字段都已标记,那么您实际上可以删除该行。

答案 2 :(得分:3)

我建议采用以下数据库设计:

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在消息表中添加消息)以便这样做即使其中一个接收者从他/她的收件箱中删除了一条消息(在这种情况下删除了收件箱表中的行),也会保留信息。

对于发件箱,不需要“读取”标志,并注意只使用主题ID。

答案 3 :(得分:2)

是的,有一种简单的方法可以做到这一点!还有两列,分别为sender_deletedreceiver_deleted。如果其中一个“删除”了该消息,那么您更新了值为1的列。显示消息时,选择确保值不同于1的消息。等等...

答案 4 :(得分:2)

另一种方法是添加两列,以确定所有者或收件人是否已请求删除(隐藏)该邮件。

owner_id | user_from | user_to | mailbox_folder | Message | Owner_hide | Recipient_hide
1          1           2         Sent             Hi         1           0

答案 5 :(得分: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。按时间戳查询。

答案 6 :(得分:1)

您可以添加user_from_deleted& user_to_deleted行并仅在未删除时显示消息。

要在会话中显示消息,您可以添加parent_id并显示具有相同parent_id的所有消息

答案 7 :(得分:1)

PM系统比一个表稍微复杂一点。如果你PM不止一个人怎么办? 在这种情况下,您需要多个表。一个用于用户,消息等...您可以使用主键和外键将它们链接起来。

尝试查找关系数据库。 这应该让你开始: http://www.databasejournal.com/sqletc/article.php/1469521/Introduction-to-Relational-Databases.htm