新手问题:
我有一个电子邮件消息表,其中包含message_id字段(主键字段)以及body,receiver_id,sender_id和parent_id等其他字段。 parent_id字段是用户回复消息时将同一线程的消息连接在一起的字段。
现在我有一个简单的查询,它查找特定reciever_id下的所有消息并返回它们。问题是我还要检查2条或更多条消息是否有相同的parent_id,如果有,我只想要返回最新的消息。
任何人都可以对此有所了解吗?
我考虑使用CASE法规,但不知道从哪里开始。
答案 0 :(得分:1)
我会在字段中添加时间戳,以便提交时间。你可以使用类似于以下内容的东西:
SELECT body, receiver_id, sender_id, parent_id
FROM messages
GROUP BY parent_id
ORDER BY timestamp DESC
LIMIT 1
注意:无法在不在桌面上尝试查询的情况下完全知道该查询是否有效,但希望它能为您指明正确的方向。
编辑: @liysd提出了一个好点,订单将合并。你需要针对iself做一个子查询。
SELECT *
FROM (SELECT * FROM messages WHERE parent_id = id)
ORDER BY timestamp DESC
LIMIT 1
答案 1 :(得分:0)
您可以使用嵌套查询,如下所示:
select *
from messages A
where A.receiver_id=:receiver_id
(and timestamp = (select max(timestamp)
from message B
where A.parent_id = B.parent_id and A.parent_id<>NULL ))
or A.parent_id = NULL