【问题标题】:ORDER BY datetime on GROUP_CONCAT not workingGROUP_CONCAT 上的 ORDER BY 日期时间不起作用
【发布时间】: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


【解决方案1】:
SELECT id,
       from_id,
       time_sent,
       message,
       GROUP_CONCAT(to_id)
FROM
  (SELECT *
   FROM messages
   WHERE to_id = '1'
   ORDER BY time_sent DESC) AS test
GROUP BY from_id

SQL Fiddle

【讨论】:

  • Sadik 兄弟 .. 现在这更令人沮丧。它在 SQL Fiddle 上工作,我可以看到,但它不在我本地的 MySQL 上。当我使用 php 甚至在 mysql 的 phpadmin 控制台中尝试它时,我只得到第一个帖子,并且 from_id 在 ASC 中。请检查imgur.com/a/BoFRf ..我做错了什么?
猜你喜欢
  • 2017-03-28
  • 2012-01-27
  • 1970-01-01
  • 2014-01-30
  • 2015-09-11
  • 2015-06-28
  • 2013-02-04
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多