php - SQL从其他表中给定时间戳后的记录中选择

标签 php html mysql sql database

我制作了 2 个表。 一个用于消息,另一个用于 deleted_chats。 如果有人删除聊天,那么它应该只显示删除时间戳后的新消息

请在您的回答中使用这些表/列名称:

user_messages: user_id, chat_id, timestamp
user_chats_deleted: user_id, chat_id, timestamp

我的 SQL 代码:

SELECT * FROM user_messages um

    LEFT JOIN (

SELECT *
FROM user_chats_deleted
GROUP BY timestamp Order by timestamp ASC Limit 1
)ud ON (um.chat_id = ud.chat_id and um.user_id = ud.user_id and ud.timestamp     < um.timestamp)

    where um.chat_id = '4' ORDER BY um.timestamp ASC

它显示消息但不是我想要的:/

最佳答案

您可以尝试几个不同的查询,尽管它们都应该做同样的事情:

SELECT *
  FROM user_messages um
 WHERE um.timestamp >
     ( SELECT MAX(um.timestamp)
         FROM user_chats_deleted ucd
        WHERE ucd.user_id = um.user_id
          AND ucd.chat_id = um.chat_id
     );

更简洁、更易读/更易理解的 SQL 脚本:

 WITH Last_Deleted_Message AS
    ( 
      SELECT user_id
           , chat_id
           , MAX(timestamp) AS max_deleted_timestamp
        FROM user_chats_deleted ucd
       GROUP
          BY user_id
           , chat_id
     )
SELECT user_id
  FROM user_messages um
  JOIN Last_Deleted_Message ldm
    ON um.user_id = ldm.user_id
   AND um.chat_id = ldm.chat_id
   AND um.timestamp > ldm.max_deleted_timestamp
 WHERE um.chat_id = '4' 
 ORDER 
    BY um.timestamp ASC;

关于php - SQL从其他表中给定时间戳后的记录中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54460582/

相关文章:

mysql - SQL 计数开始 xxx 数字

php - 为什么在 PHP 中需要类型提示?

php - 关于login.php中的while循环

javascript - 进度条达到100时不刷新

java - 无法在mysql表字段中存储完整的json字段

php - 违反完整性约束 : How to join two tables

php - Mysqli 准备语句插入不插入

javascript - jquery-ias 问题 - 未加载页脚

html - 调整字体大小 Awesome Fonts with font-size

javascript - 单击 Javascript 时旋转