是否可以将group_concat中的元素排序为整数值,而不是字符串值?
订单结果为1,11,12,3,5,6 ..
我需要1,3,5,6,11,12 ......
我尝试使用强制转换,但是不能正常工作:
GROUP_CONCAT( ..
ORDER BY
IF(attribute_value_order="order",
CAST(value_order AS SIGNED),
value_name)
ASC SEPARATOR "|" ) as value
答案 0 :(得分:1)
刚开始测试:
表格:
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
但是,如果您对ord
列使用VARCHAR,则完全相同查询的结果为
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