我有一个VIEW(很多连接)输出按日期ASC排序的数据.按预期工作.
输出类似于:
ID date tag1 other_data
1 25-03-2011 blue fff <=
1 26-03-2011 red ggg
1 27-03-2011 pink yyy
2 25-03-2011 red yyy <=
2 26-03-2011 orange rrr
如果我申请GROUP BY ID.对于其他列,MysqL输出每个ID的第一个找到的行.我在te docs的某个地方读到了这个.
SELECT * FROM `myVIEW`
GROUP BY `ID`
ID date tag1 other_data
1 25-03-2011 blue fff <=
2 25-03-2011 red yyy <=
现在让我们添加一个GROUP_CONCAT(tags1)
SELECT *,CONCAT_GROUP(`tag1`) AS `tags`
FROM `myVIEW`
GROUP BY `ID`
由于我应用CONCAT_GROUP,结果变得奇怪.我在期待:
ID date tag1 other_data tags
1 25-03-2011 blue fff blue,red,pink
2 25-03-2011 red yyy red,orange
查询正在返回,例如:
ID date tag1 other_data tags
1 26-03-2011 red ggg blue,orange
看起来GROUP_CONCAT不再保留VIEW订单.这是正常的吗?
最佳答案
Looks like
GROUP_CONCAT
no longer preserves the VIEW order. Is this normal?
是的,这是正常的.
您不应该依赖于返回未分组和未分段字段的顺序.
GROUP_CONCAT有自己的ORDER BY子句,优化器会将其考虑在内,并且可以更改解析记录的顺序.
要返回第一条记录以及GROUP_CONCAT,请使用以下命令:
SELECT m.*,gc
FROM (
SELECT id,MIN(date) AS mindate,GROUP_CONCAT(tags) AS gc
FROM myview
GROUP BY
id
) md
JOIN m.*
ON m.id = md.id
AND m.date = md.mindate