PHP专用消息(PM)系统
我计划为我的用户制作一个PM系统,总的来说似乎很简单,但从我看到的制作PM系统的教程来看,有一个问题 按照我计划的工作方式,会有一些行,比如,user_from,user_to,然后message-user_from将是发送者,将在他的send messages中看到消息,user_to将是接收者,并将在他的收件箱中看到消息。但是,如果一个用户想从他们发送的文件夹中删除一封邮件,而另一个用户不想从他们的收件箱中删除该邮件,该怎么办 有什么简单的方法可以做到这一点吗PHP专用消息(PM)系统,php,mysql,private-messaging,Php,Mysql,Private Messaging,我计划为我的用户制作一个PM系统,总的来说似乎很简单,但从我看到的制作PM系统的教程来看,有一个问题 按照我计划的工作方式,会有一些行,比如,user_from,user_to,然后message-user_from将是发送者,将在他的send messages中看到消息,user_to将是接收者,并将在他的收件箱中看到消息。但是,如果一个用户想从他们发送的文件夹中删除一封邮件,而另一个用户不想从他们的收件箱中删除该邮件,该怎么办 有什么简单的方法可以做到这一点吗 在Gmail和Facebook
在Gmail和Facebook这样的对话中包含这些信息也不错,但这可能很难编码(任何教程都值得欣赏)您只需创建两行,然后添加一列。例如:
owner_id | user_from | user_to | mailbox_folder | Message
1 1 2 Sent Hi
2 1 2 Inbox Hi
其他列:唯一的行id、时间戳、主题行等
然后,您的邮箱将基于owner_id列构建,每个用户都有自己的副本可根据自己的选择进行移动/删除
要添加对话,可以添加列或其他表。如果是新消息,请获取新的对话id,否则使用相同的id。按时间戳查询。使用所谓的软删除。这意味着当记录被“删除”时,它实际上从未从数据库中删除,而是将一个标志设置为delete(删除),允许您在需要时从用户界面中删除它,同时仍可以访问数据。因此,对于这种情况,您可以再创建两列,分别称为user_to_delete和user_from_delete。当其中一项设置为true时,您将知道不在相应用户的收件箱/发件箱中显示消息。祝您好运。您可以将用户从已删除的行添加到已删除的行,并仅在未删除时显示消息
要在对话中显示消息,您可以添加一个父id,并使用相同的父id显示所有消息。PM系统比一个表稍微复杂一些。如果你下午超过一个人怎么办? 在这种情况下,您可能需要多个表。一个用于用户、消息等。。。您可以使用主键和外键将它们链接起来 尝试查找关系数据库。 这应该让你开始:
是的,有一个简单的方法!有两个以上的列,分别是
sender\u deleted
和receiver\u deleted
。如果其中一个“删除”了该消息,则使用值1更新该列。例如显示消息时,您可以选择消息,并确保该值不同于1。等等。另一种方法是添加两列,以确定所有者或收件人是否已请求删除(隐藏)邮件
owner_id | user_from | user_to | mailbox_folder | Message | Owner_hide | Recipient_hide
1 1 2 Sent Hi 1 0
您可以通过几种方式解决此问题,但我可能会在表中添加几个标志(从_deleted到_deleted):
- 将相应的标志更新为1,而不是删除消息
- 列出消息时,过滤掉已标记的消息李>
- 您可以设置脚本,以便在标记后,如果两个字段都被标记,则可以实际删除该行
MESSAGES
+----------+------------------+---------------------------+
| id | subject_id | body |
+----------+------------------+---------------------------+
SUBJECTS
+----------+-------------+--------------+-----------------+
| id | title | author | receivers |
+----------+-------------+--------------+-----------------+
INBOX
+----------+---------------+--------------+---------------+
| id | user_id | msg_id | read |
+----------+---------------+--------------+---------------+
OUTBOX
+----------+---------------+------------------------------+
| id | user_id | subject_id |
+----------+---------------+------------------------------+
发送邮件时,在收件箱表中为所有收件人创建新行,在发件箱表中为发件人创建新行。在messages表中插入一行,其中包含主题ID和消息正文。在“主题”表中插入一行,其中包含标题、作者和所有收件人(如果发件人开始了新主题或转发了完整对话或单个邮件,则使用现有主题ID将邮件添加到“邮件”表中),这样即使其中一个收件人从其收件箱中删除邮件,也会保留此信息(在本例中,删除收件箱表中的行)
对于发件箱,不需要“读取”标志,请注意,只使用主题ID。这会添加大量重复数据。@cwhelms/shrug.它模仿其他所有系统。空间效率非常低。无论有多少人使用它,它仍然是糟糕的设计。复制糟糕的设计甚至比创建它更糟糕。很高兴你们两个可以拍拍ea这听起来很comlpex,也许可以看看,但我认为我的技能还没有那么好:-)这将节省你以后的时间,当你想添加更多功能时。只需要几个表:users,messages,以及一个为用户和消息将用户ID和消息相互链接的表(我称之为链接表,但这可能不是正确的措辞:/)。听起来像其他建议,但没有提到在两者都将消息标记为deleted时删除行,谢谢。:-)