mysql 两个字段拼接_MySQL把多个字段合并成一条记录的方法(GROUP_CONCAT)

429d928ff8e6dd255b815783481679c.png

7f992e6767dbb4d6a44047bfc045586.png

这个结果显然不对,结果应该是1、2条合并成一天,但是有projectFavorite(中间表)影响,查了下用GROUP_CONCAT

GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。

使用表info作为示例,其中语句SELECT locus,id,journal FROM info WHERE locus IN('AB086827','AF040764');的返回结果为

图片.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; 的返回结果为

图片.png

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

图片.png

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

图片.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

图片.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值