我制作了 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/