如何使用Mysql限制查询结果

时间:2010-07-31 20:15:45

标签: mysql

新手问题:

我有一个电子邮件消息表,其中包含message_id字段(主键字段)以及body,receiver_id,sender_id和parent_id等其他字段。 parent_id字段是用户回复消息时将同一线程的消息连接在一起的字段。

现在我有一个简单的查询,它查找特定reciever_id下的所有消息并返回它们。问题是我还要检查2条或更多条消息是否有相同的parent_id,如果有,我只想要返回最新的消息。

任何人都可以对此有所了解吗?

我考虑使用CASE法规,但不知道从哪里开始。

2 个答案:

答案 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