[英]Order between multiple GROUP_CONCAT columns
我似乎找不到任何關於 GROUP_CONCAT function 默認行為的信息,當我使用其中的多個時,返回的值是否會在它們之間具有相同的順序?
對於此示例表和數據:
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:
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,但列的 rest 保持不變(#aa11dd,#ffffff; 1,2)? 我並不真正關心整體順序(DESC / ASC),我只想知道每列是否總是與其他列相同?
在GROUP_CONCAT()
function 中沒有ORDER BY
子句的情況下,引擎可以按任何順序自由組合值,並且該順序隨着時間的推移並不穩定。 每個GROUP_CONCAT()
function 也可能有不同的順序。
為了確保穩定的排序,在GROUP_CONCAT()
function 中使用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
對所有值進行排序,以確保穩定且已知的順序,並確保每列始終具有與其他列相同的順序。
根據文檔,您可以指定確切的順序:
GROUP_CONCAT(DISTINCT `weight` ORDER BY `weight` ASC SEPARATOR ', ')
默認順序未知
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.