以下代码有效,但我希望组按日期时间显示最新查询,而不是第一个日期时间查询。我尝试从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日(这是一个小组)
请帮忙。
答案 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