PHP - 消息收发箱系统

时间:2014-08-21 10:29:09

标签: php mysql

我正在开发一个消息传递收件箱系统。用户创建针对其他用户的消息线程。它将如下工作:

  1. 您收到的邮件主题会显示在收件箱中。
  2. 您创建的消息主题也会显示在收件箱中。
  3. 您删除的邮件主题只会从您自己的收件箱中删除。
  4. 我的message_thread表中有以下字段:

    • ID
    • from_user_id
    • to_user_id
    • 受试者
    • 删除
    • 的updated_at

    我已设法使用以下查询实现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_deletedto_user_deleted)。是否可以通过扩展查询来检索正确的结果集,还是需要在服务器端脚本(目前使用PHP)中完成?

    编辑:如果用户A删除了一个帖子,然后用户B发送了该帖子的回复,它就会重新出现在用户A的收件箱中。

3 个答案:

答案 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_id(FK)
  • user_id(FK)
  • 已删除(默认为0)

创建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