mysql【group_concat】数据库将查询的多条结果的某些字段合并为一个字段处理
在使用mysql数据库做一些业务时,比如将一条记录对应的多条详情数据记录归并为该条记录的某一个字段时,可以使用mysql的concat_ws和group_concat方法来进行处理:
使用concat_ws方法将详情数据的一条记录的多个字段先拼接合并为一个字段,然后使用group_concat将多条详情数据合并处理的字段拼接合并为一个字段。
语法:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
在 MySQL 中,通过使用 DISTINCT 可以排除重复值,通过使用 ORDER BY 子句对结果中的值进行排序。
SEPARATOR 是一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (","),可以通过指定 SEPARATOR "" 完全地移除这个分隔符。
可以通过变量 group_concat_max_len 设置一个最大的长度。在运行时执行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大长度被设置,结果值被剪切到这个最大长度。如果分组的字符过长,可以对系统参数进行设置:SET @@global.group_concat_max_len=40000
示例如下:
SELECT GROUP_CONCAT(tmp.fileInfo) AS fileInfos FROM ( SELECT CONCAT_WS( '-', file_name, file_url ) AS fileInfo FROM clientlogdetail WHERE serial_no = 11 ) tmp;
以上sql是使用CONCAT_WS方法将clientlogdetail表中的file_name和file_url字段通过分割符-拼接合并为一个字段,之后使用GROUP_CONCAT方法将前面拼接的结果继续拼接合并为一个字段。效果如下:
详情记录字段值:
详情记录字段合并结果:
所有详情记录结果合并结果:
group_concat还可以设置拼接前缀和后缀符,如group_concat("", 字段名,"'")是以单引号将结果组合进行拼接。