我正在开发一个消息传递收件箱系统。用户创建针对其他用户的消息线程。它将如下工作:
我的message_thread
表中有以下字段:
我已设法使用以下查询实现1和2:
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的方法。
我假设需要引入新列(from_user_deleted
和to_user_deleted
)。是否可以通过扩展查询来检索正确的结果集,还是需要在服务器端脚本(目前使用PHP)中完成?
编辑:如果用户A删除了一个帖子,然后用户B发送了该帖子的回复,它就会重新出现在用户A的收件箱中。
答案 0 :(得分:0)
请尝试以下代码:
1.您可以将新字段添加为状态
2.Status
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
答案 1 :(得分:0)
用简单的英语:
其中 (信息是给你的 要么 (信息来自你 和 邮件未删除) )
答案 2 :(得分:0)
我设法通过添加一个新表来解决这个问题:
message_thread_status
创建message_thread
时,它会在message_thread_status
表中创建两个条目(消息线程中每个用户一个)。
然后我只需要在message_thread_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