MySQLgroup_concat()的用法
group_concat() 的全部用法
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
好了我们来一个一个测试
首先我们建一个测试表
CREATE TABLE `demo` (
`id` varchar(50) NOT NULL,
`type` tinyint(3) DEFAULT '0' COMMENT '类型:0菜鸡,1入门,2大神',
`name` varchar(20) DEFAULT NULL COMMENT '姓名',
`px` int(11) DEFAULT '1' COMMENT '排序字段',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我们来插入一些测试数据
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796ae548-1bc6-11ea-b5cf-84306463c5b2', '0', '小王','1');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cc79d-1bc6-11ea-b5cf-84306463c5b2', '0', '小王','2');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796ccda3-1bc6-11ea-b5cf-84306463c5b2', '1', '小王','3');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cceb8-1bc6-11ea-b5cf-84306463c5b2', '2', '小王','4');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796ccf52-1bc6-11ea-b5cf-84306463c5b2', '0', '小流','5');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796ccfce-1bc6-11ea-b5cf-84306463c5b2', '0', '小集','6');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cd049-1bc6-11ea-b5cf-84306463c5b2', '1', '小皮','7');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cd0ba-1bc6-11ea-b5cf-84306463c5b2', '1', '小求','8');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cd140-1bc6-11ea-b5cf-84306463c5b2', '2', '小海','9');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cd1ac-1bc6-11ea-b5cf-84306463c5b2', '2', '小蛋','10');
注意:使用group_concat 要配合使用group by
1.将每个分类有哪些人查出来,并显示在一起
SELECT
CASE type
WHEN 0 THEN
'菜鸡'
WHEN 1 THEN
'入门'
WHEN 2 THEN
'大神'
ELSE
'菜鸡'
END AS typename,
GROUP_CONCAT(NAME)
FROM
demo
GROUP BY
type
输出
我们可以看到好像有重复的名字,有时候我们相同名字字需要显示一次这时候我们可以这样写
SELECT
CASE type
WHEN 0 THEN
'菜鸡'
WHEN 1 THEN
'入门'
WHEN 2 THEN
'大神'
ELSE
'菜鸡'
END AS typename,
GROUP_CONCAT(DISTINCT NAME )
FROM
demo
GROUP BY
type
输出
当我们想吧名称按照排序显示时
SELECT
CASE type
WHEN 0 THEN
'菜鸡'
WHEN 1 THEN
'入门'
WHEN 2 THEN
'大神'
ELSE
'菜鸡'
END AS typename,
GROUP_CONCAT(DISTINCT NAME ORDER BY px)
FROM
demo
GROUP BY
type
输出
当我们不想用,号分隔,想用;时
SELECT
CASE type
WHEN 0 THEN
'菜鸡'
WHEN 1 THEN
'入门'
WHEN 2 THEN
'大神'
ELSE
'菜鸡'
END AS typename,
GROUP_CONCAT(DISTINCT NAME ORDER BY px SEPARATOR ';')
FROM
demo
GROUP BY
type
输出
修改group_concat默认长度限制
解决办法:
(1)使用sql语句(亲测可用) 缺点数据库重启后会失效
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;
(2)修改配置文件
在mysql配置文件中添加如下这句,修改配置文件后记得需要重启mysql服务
group_concat_max_len = 102400