簡體   English   中英

多個 GROUP_CONCAT 列之間的順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM