我想将SEPARATOR
的{{1}}值作为变量(或函数参数)传递,但是此代码将失败
GROUP_CONTACT
我知道我可以做类似的事情
SET @sep = ' ';
SELECT
`group`,
GROUP_CONCAT( `field` ORDER BY `idx` SEPARATOR @sep ) `fields`
FROM `table`
GROUP BY `group`;
但是拥有更简洁的语法会更好。
编辑:
SELECT
`group`,
SUBSTRING(
GROUP_CONCAT( CONCAT(`field`,@sep) ORDER BY `idx` SEPARATOR ''),
1,
LENGTH(
GROUP_CONCAT( CONCAT(`field`,@sep) ORDER BY `idx` SEPARATOR '')
)-LENGTH(@sep)
) `fields`
FROM `table`
GROUP BY `group`;
简单一些,但不够令人满意。
答案 0 :(得分:1)
您可以使用准备好的语句:
SET @sep = '**';
SET @sql = CONCAT('SELECT `group`, GROUP_CONCAT( `field` ORDER BY `idx` SEPARATOR "',
@sep, '") `fields` FROM `table` GROUP BY `group`');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我在dbfiddle上创建了一个小型演示:
create table `table` (idx int auto_increment primary key, field varchar(10), `group` int);
insert into `table` (field, `group`) values
('hello', 4),
('world', 4),('today', 4),('hello', 3),('world', 3),
('hello', 5),('today', 5),('world', 5),('goodbye', 5)
准备好的语句的输出为:
group fields
3 hello**world
4 hello**world**today
5 hello**today**world**goodbye