一帚呼、完整的語法
group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
二掏缎、樣例
1皱蹦、查詢原始數(shù)據(jù)
SELECT question_id, question_name,item_name FROM t_survey_answer_item;
原始數(shù)據(jù)
2、按題目分組眷蜈,將答案用字段的值打印在一行沪哺,逗號分隔(默認(rèn))
select question_name,GROUP_CONCAT(item_name) from t_survey_answer_item group by question_name;
按題目分組,將答案用字段的值打印在一行
3酌儒、按題目分組辜妓,將答案用字段的值打印在一行,分號分隔
select question_name,GROUP_CONCAT(item_name separator ';') from t_survey_answer_item group by question_name;
按題目分組忌怎,將答案用字段的值打印在一行籍滴,分號分隔
4、按某字段排序拼接
select question_name,GROUP_CONCAT(item_name order by item_name asc separator ';') from t_survey_answer_item group by question_name;
三榴啸、長度限制
平常使用可能發(fā)現(xiàn)不了問題异逐,在處理大數(shù)據(jù)的時(shí)候,會發(fā)現(xiàn)內(nèi)容被截取了插掂,其實(shí)MYSQL內(nèi)部對這個(gè)是有設(shè)置的灰瞻,默認(rèn)不設(shè)置的長度是1024個(gè)字符,如果我們需要更大辅甥,就需要手工去修改配置酝润。
1、查看當(dāng)前mysql group_concat_max_len
show variables like 'group_concat_max_len'
2璃弄、如果不方便重啟mysql 可以在mysql狀態(tài)通過命令設(shè)置要销,如
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;
此種方式在mysql重啟后會讀取配置文件重新設(shè)置,會導(dǎo)致設(shè)置失效夏块,所以建議依舊要修改配置文件疏咐。
3、修改配置文件:my.ini
在[mysqld]下新增配置:group_concat_max_len = 102400
重啟脐供,通過方式1查看即可浑塞。
4、不限制大小
有時(shí)我們并不知需要多大的字節(jié)才能滿足需求政己,此種情況可以考慮不設(shè)置最大字節(jié)(即采用最大字節(jié)數(shù))即在配置文件設(shè)置group_concat_max_len=-1