我似乎找不到任何关于GROUP_CONCAT函数默认行为的信息,主要是当我使用其中的多个时,返回值之间的顺序是否相同?
对于本示例表和数据:
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`parentId` int(11) NOT NULL,
`weight` int(11) NOT NULL,
`color` varchar(7) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` (`id`, `parentId`, `weight`, `color`) VALUES
(1, 1, 500, '#aa11dd'),
(2, 1, 770, '#ffffff'),
(3, 2, 100, '#ff00ff'),
(4, 2, 123, '#556677');如果我执行此操作,请选择:
SELECT `parentId`,
GROUP_CONCAT(`weight`),
GROUP_CONCAT(`color`),
GROUP_CONCAT(`id`)
FROM `test`
GROUP BY `parentId`它返回:
parentId GROUP_CONCAT(weight) GROUP_CONCAT(color) GROUP_CONCAT(id)
1 500,770 #aa11dd,#ffffff 1,2
2 79798,123 #ff00ff,#556677 3,4例如,有没有可能在第一行中,值500,770将翻转为770,500,而其余列保持不变(#aa11dd,#ffffff;1,2)?我真的不关心整体顺序(DESC / ASC),我只想知道,每一列是否总是与其他列的顺序相同?
发布于 2020-07-22 19:34:18
在GROUP_CONCAT()函数中没有ORDER BY子句的情况下,引擎可以自由地以任何顺序组装值,并且这种顺序不会随着时间的推移而稳定。每个GROUP_CONCAT()函数也可以有不同的排序。
为了确保稳定的排序,在GROUP_CONCAT()函数中使用ORDER BY。
例如:
SELECT
`parentId`,
GROUP_CONCAT(`weight` order by `id`),
GROUP_CONCAT(`color` order by `id`),
GROUP_CONCAT(`id` order by `id`)
FROM `test`
GROUP BY `parentId`此示例通过id对所有值进行排序,以确保一个稳定的已知顺序,并确保每一列始终与其他列具有相同的顺序。
发布于 2020-07-22 19:39:47
根据文档,您可以指定确切的顺序:
GROUP_CONCAT(DISTINCT `weight` ORDER BY `weight` ASC SEPARATOR ', ')默认顺序未知
https://stackoverflow.com/questions/63033175
复制相似问题