【发布时间】:2016-12-04 22:31:25
【问题描述】:
我在 MySQL 中创建了一个包含以下列的表:
id - from_id - to_id - datetime - message
在日期时间列中,日期时间的存储方式如下:
2016-07-28 17:36:24
2016-07-28 17:39:24
2016-07-28 17:41:15
我在 to_id 上使用 GROUP_CONCAT 来存储来自 from_id 的所有消息并仅显示 1 条消息(最新消息)。我的查询是:
SELECT id, from_id, time_sent, message, GROUP_CONCAT(to_id order BY
time_sent DESC) FROM messages WHERE to_id = '1' GROUP BY from_id
我通过from_id 获得所有结果,但消息是第一个。似乎没有应用order BY time_sent DESC。
我已尝试订购 BY UNIX_TIMESTAMP(time_sent) DESC,尝试在查询结束时下订单。没有任何效果。我希望from_id显示最新消息。
【问题讨论】:
-
SELECT id, from_id, time_sent, message ... GROUP BY from_id如您所见,您按from_id分组,但显示更多列而没有聚合功能。现在 MySQL 可以选择任何行。相关:Group by clause in mySQL and postgreSQL, why the error in postgreSQL? -
你能给sql fiddle你的数据,以便我们尽快给出答案
-
我认为您的查询有错误,因为在 where 子句中您在 to_id 上写入“to_id = '1'”和 GROUP_CONCAT,那么结果将只是“1”????
-
有多个结果.. 但我想查看来自_id 的最新消息,有多个
from_id有多个行,其中有一条消息到to_id,所以它分组正常,但最新消息不是显示。 -
我同意。 GROUP_CONCAT 只是返回一个 1 的字符串。这有什么意义?
标签: mysql datetime sql-order-by group-concat