GROUP_CONCAT按整数排序,而不是字符串

时间:2014-08-14 08:54:29

标签: mysql mysqli

是否可以将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

1 个答案:

答案 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来更改不同群组的整个IFGROUP_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