php - SQL 从其他表中给定时间戳后的记录中选择
问题描述
我做了2张桌子。一个用于消息,另一个用于已删除聊天。如果有人删除了聊天,那么它应该只显示删除时间戳后的新消息
请在您的答案中使用这些表/列名称:
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;
推荐阅读
- haskell - 解决 MultiParameterTypeClass 中的歧义
- java - 如何提示 Java 中的用户输入一周中的某一天,枚举中的天数输出我想要的响应
- c# - c#从窗口标题获取进程ID
- php - Laravel $request->url() 返回无主 url
- simulation - 关于使用construct2d创建网格的问题
- javascript - 使用 a-frame 放置导入的对象 (obj)
- swiftui - 导入presentationMode环境变量时自定义NavigationView搞砸了
- javascript - 电子节点集成不起作用,也是一般奇怪的电子行为
- json - 如何拒绝用户访问我网站子文件夹中的 json 文件
- php - PHPMailer 无法处理联系表单