PHP-消息传递收件箱系统
我正在开发一个邮件收件箱系统。用户创建指向其他用户的消息线程。其工作如下:PHP-消息传递收件箱系统,php,mysql,Php,Mysql,我正在开发一个邮件收件箱系统。用户创建指向其他用户的消息线程。其工作如下: 您收到的消息线程将显示在您的收件箱中 您创建的消息线程也会显示在您的收件箱中 您删除的邮件线程仅从您自己的收件箱中删除 我的message\u-thread表中有以下字段: 身份证 来自\u用户\u id 到用户id 主题 删除 更新地址 我已使用以下查询实现了1和2: SELECT * FROM message_thread mt WHERE ((mt.from_user_id = 1 OR mt.to_user_
message\u-thread
表中有以下字段:
- 身份证
- 来自\u用户\u id
- 到用户id
- 主题
- 删除
- 更新地址
SELECT * FROM message_thread mt
WHERE ((mt.from_user_id = 1 OR mt.to_user_id = 1) AND mt.deleted = 0)
ORDER BY mt.updated_at DESC
我正试图找出一种实现3的方法
我假设需要引入新的列(从_user_deleted
和到_user_deleted
)。是否可以通过扩展查询来检索正确的结果集,或者这需要在服务器端脚本中完成(当前使用PHP)
编辑:如果用户A删除一个线程,然后用户B向该线程发送回复,该回复应重新出现在用户A的收件箱中。请尝试以下代码: 1.您可以将新字段添加为状态 2.地位
1 = from_user_deleted
2 = to_user_deleted
然后查询
SELECT * FROM message_thread mt
WHERE ((mt.from_user_id = 1 OR mt.to_user_id = 1) AND mt.deleted = 0 AND mt.status<>2)
ORDER BY mt.updated_at DESC
从消息中选择*
其中((mt.from\u user\u id=1或mt.to\u user\u id=1)和mt.deleted=0和mt.status2)
mt在DESC更新的订单
通俗易懂的英语:
在哪里
(留言是给你的
或
(留言是你发来的
及
消息未被删除)
)我通过添加一个新表来解决这个问题:
消息\u线程\u状态
- 消息线程id(FK)
- 用户id(FK)
- 已删除(默认为0)
消息线程
时,它会在消息线程状态
表中创建两个条目(消息线程中的每个用户一个条目)
然后,我只需要在message\u thread\u status
表中找到当前用户的记录,并添加一个条件来检查deleted
的值
新查询:
SELECT
* FROM message_thread mt
LEFT OUTER JOIN
message_thread_status mts ON mts.message_thread_id = mt.id
WHERE
((mt.from_user_id = 1 OR mt.to_user_id = 1)
AND (mts.user_id = 1 AND mts.deleted = 0))
ORDER BY
mt.updated_at DESC
我不久前也做了同样的事情,如果没有为每条消息添加另一个表或标志,您将无法解决此问题。我创建了一个表来包含消息原型、发送者和接收者,以及一个表来覆盖状态列,如is_read、is_deleted等等。我从第二个表中获取当前用户的选项,如果其已删除,则不显示,如果其标记为未读,则以粗体显示,等等。如果第二个表中不存在该条目,我将采用标准值,因为它从未像这样保存:(未读,未删除)。这不起作用。。我将状态设置为1,但它仍然显示在两个用户的收件箱中。