GROUP BY ORDER BY帮助

时间:2011-04-19 20:11:43

标签: mysql sql group-by sql-order-by

以下代码有效,但我希望组按日期时间显示最新查询,而不是第一个日期时间查询。我尝试从ASC / DESC更改ORDER BY,但这只是改变了所有组的顺序,而不是组中的数据。我需要所有组的内部数据和所有组按最新日期时间排序。

$query="SELECT * FROM emails 
        WHERE sentto='$sid' 
        GROUP BY sentto 
        ORDER BY datetime DESC LIMIT $eu, $limit ";

而不是显示组并按第一个查询排序:
来自Sam Richards的消息 2011年1月22日(这是一个小组)
来自John Smith的消息 2011年1月5日(这是一个小组)

我希望它显示群组并按最新查询排序:
来自John Smith的消息 2011年4月19日(这是一个小组)
来自Sam Richards的消息 2011年3月10日(这是一个小组)

请帮忙。

3 个答案:

答案 0 :(得分:2)

我认为您的部分问题是您正在使用分组查询选择非聚合列。您应该明确指出要在聚合查询结果中返回哪些值。​​

SELECT sentto, MAX(datetime) AS datetime FROM emails
  GROUP BY sentto
  ORDER BY datetime desc LIMIT $eu, $limit;

我仍然不确定这会给你你想要的东西。听起来您想要实际检索每个电子邮件的行,并使用GROUP BY最大值进行排序。为此,您可能需要执行上述查询,然后返回并为每个sentto执行第二次查询。在单个查询中,我无法想到一种方法。

SELECT * FROM emails
  WHERE sentto=$sid
  ORDER BY datetime DESC;

(对于第一个查询中返回的每个sentto。)

答案 1 :(得分:1)

怎么样:

ORDER BY sentto ASC, datetime DESC

答案 2 :(得分:0)

要在您需要在ORDER BY子句中包含sentto的组中对数据进行排序。

试试这个:

SELECT * FROM emails 
            WHERE sentto='$sid' 
            GROUP BY sentto 
            ORDER BY sentto, datetime DESC LIMIT $eu, $limit