SQL GROUP BY选择

Fra*_*ank 2 mysql group-by

这是我的代码:

mysql_query("SELECT * FROM messages WHERE to_user_id = '$user_id' GROUP BY from_user_id ORDER BY read,sent_date DESC")

这是我的桌面结构

在此输入图像描述

我使用该GROUPY BY from_user_id语句简要显示"对话"列表而不是每条消息.像这样

在此输入图像描述

但是,正如你在图片中看到的那样,前两个是错误的方式,第一个说"1周前",下面的一个说"2天前".这些错误顺序的原因是由于GROUP BY from_user_id声明.因为它将来自该用户的所有消息分组,并且它不会有最近的时间.

所以我的问题是:

我怎么能通过 GROUP BY from_user_id 最近的记录?

Jas*_*ary 6

SELECT不能列入GROUP BY或未允许的功能中列出的列.这是如何GROUP BY工作的.

虽然大多数其他SQL风格都会在这样的查询中失败,但MySQL却没有.相反,它提供任意结果 - 你所看到的.

您可以通过几种不同的方式解决此问题.例如:

  • SELECT在单独的查询中使用的最新用户对话的IDGROUP BY.
  • 通过子选择ididJOIN组在一个查询中完成所有操作.