下面的代码可以工作,但我希望组按日期时间显示其最新查询,而不是第一个日期时间查询。我试过从ASC/DESC更改顺序,但这只是更改了所有组的顺序,而不是组内的数据。我需要所有组的内部数据和所有组都按最新日期时间排序。

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

而不是显示组并按第一个查询排序:
2011年1月22日山姆·理查兹的留言(本组)
约翰·史密斯2011年1月5日的来信(本组)
我希望它显示组并按最新查询排序:
约翰·史密斯2011年4月19日的来信(本组)
2011年3月10日山姆·理查兹的留言(本组)
请帮忙。

最佳答案

我认为问题的一部分是,您正在使用GROUPBY查询选择非聚合列。应该明确说明希望它在聚合查询结果中返回哪些值。

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

我还是不确定这能给你想要的。这听起来好像你想实际检索每一个电子邮件的行,只需使用最大的组排序。要做到这一点,您可能需要执行上面的查询,然后返回并对每个sentto执行第二个查询。我想不出一个简单的方法在一个查询中完成它。
SELECT * FROM emails
  WHERE sentto=$sid
  ORDER BY datetime DESC;

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

10-06 08:03