在MySql中提供了两个字符串的操作函数:Concat,Concat_ws.对于他们的介绍比较多,然而我们更多的需要使用到按列分组连接才能满足我们的需求,这里可以使用Group_concat来实现。
GROUP_CONCAT(expr)
完整句法如下: GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
这个函数在 MySQL 4.1 中被加入。函数返回一个字符串结果,该结果由分组中的值连接组合而成: mysql> SELECT student_name,
-> GROUP_CONCAT(test_score)
-> FROM student
-> GROUP BY student_name;
or
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR " ")
-> FROM student
-> GROUP BY student_name;
在 MySQL 中,你可以得到表达式结合体的连结值。通过使用 DISTINCT 可以排除重复值。如果希望对结果中的值进行排序,
可以使用 ORDER BY 子句。为了以倒序排序,可以在 ORDER BY 子句中用于排序的列名后添加一个 DESC (递减 descending) 关键词
。缺省为升序;这也可以通过使用 ASC 关键词明确指定。
SEPARATOR 是一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (",")。
你可以通过指定 SEPARATOR "" 完全地移除这个分隔符。
在你的配置中,通过变量 group_concat_max_len 要以设置一个最大的长度。
在运行时执行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大长度被设置,结果值被剪切到这个最大长度。
GROUP_CONCAT() 函数是一个增强的 Sybase SQL Anywhere 支持的基本 LIST() 函数。
如果只有一个列,并且没有其它选项被指定,GROUP_CONCAT() 是向后兼容有极大限制的 LIST() 函数。
LIST() 有一个缺省的排序次序。
如果分组的字符过长,可以对系统参数进行设置
SET @@global.group_concat_max_len=40000;