是否可以将 group_concat 中的元素作为整数值而不是字符串值进行排序?
排序结果为1,11,12,3,5,6..
我需要 1,3,5,6,11,12...
我尝试使用 Actor ,但 des 不起作用:
GROUP_CONCAT( ..
ORDER BY
IF(attribute_value_order="order",
CAST(value_order AS SIGNED),
value_name)
ASC SEPARATOR "|" ) as value
最佳答案
刚刚运行测试:
表格:
CREATE TABLE IF NOT EXISTS `gc` (
`ord` int(11) NOT NULL,
`group` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `gc` (`ord`, `gr`) VALUES
(1, 0), (2, 0), (1, 0), (2, 0), (11, 0), (12, 0), (3, 0), (5, 0),
(1, 1), (2, 1), (1, 1), (2, 1), (11, 1), (12, 1), (3, 1), (5, 1);
我跑了SELECT GROUP_CONCAT(ord ORDER BY ord) FROM gc GROUP BY gr
结果就是你想要的:
1,1,2,2,3,5,11,12
但是如果您使用 VARCHAR 来表示 ord
列,完全相同的查询的结果是
1,1,11,12,2,2,3,5
但是查询SELECT GROUP_CONCAT(ord ORDER BY CAST(ord AS SIGNED)) FROM gc GROUP BY gr
再次返回
1,1,2,2,3,5,11,12
我使用 MySQL 5.6.11 对此进行了测试
更新
您无法更改 ORDER BY
GROUP_CONCAT
中的条款与 IF
,但您可以更改整个 GROUP_CONCAT
对于不同的群体,写 IF
在GROUP_CONCAT
前面
SELECT
gr,
IF(gr = 0,
GROUP_CONCAT(ord ORDER BY CAST(ord AS SIGNED)),
GROUP_CONCAT(ord ORDER BY ord ) ) AS res
FROM gc
GROUP BY gr
结果
gr res
0 1,1,2,2,3,5,11,12
1 1,1,11,12,2,2,3,5
关于mysql - GROUP_CONCAT 按整数排序,而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303968/