MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)

:https://www.cnblogs.com/appleat/archive/2012/09/03/2669033.html

MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)_第1张图片
429d928ff8e6dd255b815783481679c.png

MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)_第2张图片
7f992e6767dbb4d6a44047bfc045586.png

这个结果显然不对,结果应该是1、2条合并成一天,但是有projectFavorite(中间表)影响,查了下用GROUP_CONCAT
GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。
使用表info作为示例,其中语句SELECT locus,id,journal FROM info WHERE locus IN('AB086827','AF040764');的返回结果为
MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)_第3张图片
图片.png

1、使用语法及特点:
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;

2、使用示例:
语句 SELECT locus,GROUP_CONCAT(id) FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus; 的返回结果为


MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)_第4张图片
图片.png

语句 SELECT locus,GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_') FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;的返回结果为


MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)_第5张图片
图片.png

语句SELECT locus,GROUP_CONCAT(concat_ws(', ',id,journal) ORDER BY id DESC SEPARATOR '. ') FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;的返回结果为
MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)_第6张图片
图片.png

那接下来该解决我的问题

SELECT  p.id AS pId,p.projectName,p.createUser projectCreateUser,GROUP_CONCAT(pf.userId) AS projectFavorite,t.* FROM project p 
LEFT JOIN projectUser pu ON pu.projectId=p.id 
LEFT JOIN projectFavorite pf ON pf.projectId=p.id
LEFT JOIN task t ON t.projectId = p.id 
LEFT JOIN taskUser tu ON tu.userId=pu.userId AND tu.taskId=t.id
WHERE t.state!=1 AND p.shopId=10593 AND p.projectState=0 AND pu.userId=4 AND ( t.parentId=0 OR t.parentId IS NULL ) 
 AND tu.userId=4 GROUP BY p.id,t.id ORDER BY p.createDate DESC , t.id DESC 
MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)_第7张图片
图片.png

你可能感兴趣的:(MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT))