把id相同的多行数据合并到一起

表结构如上图所示,现在需要将name相同的数据合并到一起。

这张图是合成以后的结果,具体代码如下。

SELECT name, GROUP_CONCAT(id) as res FROM test GROUP BY name

其实文章写到这里就已经结束了,但是在实际操作中难免还是会有一些问题。

问题一:查询结果可能会出现BOLB类型的字段。

解决方法:使用cast(字段名 as 类型)完成类型转换,例:cast(id as char)


问题二:GROUP_CONCAT函数有最大长度,超过的部分会被截断,也就是说,如果你合并数据的长度超过了这个最大长度,超过的部分就没有了。

解决方法:使用 show variables like ‘group_concat_max_len’ 来查看这个最大长度是多少,通过 SET GLOBAL group_concat_max_len = 102400 来修改这个值。


问题三:无法通过上述语句修改 ‘group_concat_max_len’。

解决方法:修改 mysql 目录下的 my.ini 文件,在[mysqld]下新增配置:group_concat_max_len = 102400,然后重启mysql。


问题四:找不到mysql目录。

解决方法:执行 SELECT @@basedir 语句。


问题五:mysql 目录下没有 my.ini 文件。

解决方法:如果是 windows 系统,先到C盘把隐藏文件显示出来,进到 programdata/mysql/mysql server 版本号 就可以找到。如果是 Linux 系统则进入/etc目录直接修改 my.cnf 文件就好了,具体方法和问题三的解决方法一致。