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

Mysql GROUP_CONCAT按整数排序,而不是按字符串排序,mysql,mysqli,Mysql,Mysqli,是否可以将组_concat中的元素排序为整数值,而不是字符串值 顺序结果为1,11,12,3,5,6.. 我需要1,3,5,6,11,12 我尝试使用cast,但des不起作用: GROUP_CONCAT( .. ORDER BY IF(attribute_value_order="order", CAST(value_order AS SIGNED), value_name) ASC SEPARATOR "|" ) as value 只是

是否可以将组_concat中的元素排序为整数值,而不是字符串值

顺序结果为1,11,12,3,5,6..
我需要1,3,5,6,11,12

我尝试使用cast,但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);
我从gc gr GROUP BY gr中运行了
选择GROUP_CONCAT(ord ORDER BY ord),结果正如您所希望的:

1,1,2,2,3,5,11,12
但是如果对
ord
列使用VARCHAR,则完全相同的查询的结果是

1,1,11,12,2,2,3,5
但是从gc GROUP BY gr中选择GROUP_CONCAT(ord ORDER BY CAST(ord AS SIGNED))的查询
再次返回

1,1,2,2,3,5,11,12
我用MySQL 5.6.11测试了这个

更新

您不能使用
IF
更改
GROUP\u CONCAT
中的
ORDER BY
子句,但您可以通过在
GROUP\u CONCAT
前面写入
IF
来更改不同组的整个
GROUP\u 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

也许您可以用LPAD来解决订单值为零的问题,但是这种行为正常吗?或者我做错了什么?试着用一个IF-inside-GROUP\u-CONCAT。我的查询只是一个简单的例子,我有一个连接属性、值和产品的大查询。某些产品的抗药性值。属性实体有一个字段,其值的顺序字段(名称或顺序数字)。根据属性的不同,这些值从一个或其他字段中排序。我对其他系统没有问题,但我很好奇这个问题是否能解决。也许你可以在小组讨论之前给你写一封if。问题似乎是,您无法更改要连接的每个项目的顺序。但是,由于您的IF不受您关注的项目的影响,您可以使用
IF(…、GROUP_concat(…)、GROUP_concat(…)作为GROUP concat