首页
学习
活动
专区
圈层
工具
发布

系统
EN

Stack Overflow用户
提问于 2014-08-21 10:29:09
回答 2查看 2.4K关注 0票数 1

我正在开发一个信息收件箱系统。用户创建针对另一个用户的消息线程。它的工作方式如下:

  1. 收到的消息线程将显示在收件箱中。
  2. 您创建的消息线程也会出现在收件箱中。
  3. 您删除的消息线程仅从您自己的收件箱中删除。

我的message_thread表中有以下字段:

  • id
  • from_user_id
  • to_user_id
  • 主题
  • 已删除
  • updated_at

我使用以下查询成功地实现了1和2:

代码语言:javascript
复制
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_deletedto_user_deleted)。是否可以通过扩展查询来检索正确的结果集,或者是否需要在服务器端脚本(当前使用PHP)中进行检索?

编辑:如果用户A删除一个线程,然后用户B向该线程发送一个回复,它应该重新出现在用户A的收件箱中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-21 13:58:59

我通过添加一个新表来解决这个问题:

message_thread_status

  • message_thread_id (FK)
  • user_id (FK)
  • 删除(默认为0)

创建message_thread时,它在message_thread_status表中创建两个条目(消息线程中的每个用户一个)。

然后,我只需要在message_thread_status表中找到当前用户的记录,并添加一个条件来检查deleted的值。

新查询:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2014-08-21 10:46:45

用通俗的英语:

其中(消息是给您的或(消息来自您,而消息未被删除))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25424020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档