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

标签 mysql

是否可以将 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对于不同的群体,写 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

关于mysql - GROUP_CONCAT 按整数排序,而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303968/

相关文章:

php - 如何在 MySQL 的一个字段中存储多个动态值?

java - 如何更改数据库连接来创建 java 应用程序的安装程序?

php - 使用 PHP 和 Ajax 检查用户名并显示个人资料图片的自定义登录表单

Mysql:从二进制 ip 和子网获取 IPv6 二进制网络掩码

android - 使用android从mysql检查值

mysql - 从另一个表更新表数据

PHP/MySQL 验证列中是否存在值

php - 从外部加载 WordPress 核心文件会导致站点的其余部分使用 wordpress mysql 连接

php - Codeigniter SQL 查询构建

PHP/MySQL 时间戳和时区