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
    • 主题
    • 删除
    • 更新地址
    我已使用以下查询实现了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的方法

    我假设需要引入新的列(
    从_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,但它仍然显示在两个用户的收件箱中。