【MySQL】CONCAT 和 GROUP_CONCAT

本文详细介绍了MySQL中的GROUP_CONCAT和CONCAT函数的使用方法,包括如何组合字段形成字符串、如何处理NULL值、如何限定组合字符串长度等,并通过实例展示了这两种函数在处理相册与照片数据时的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做项目时遇到这样一个需求:数据库有一张album相册表和一张image照片表,页面要显示的是相册的名称和该相册下所有的照片(一个相册包括好几张照片):
相册表:

照片表:

第一次尝试:这样可以发现相册名称会重复很多

第二次尝试:使用GROUP_CONCAT函数,这样就可以将相册下的所有照片显示在对应的一个相册了

这样在前端对photo分割,显示每张照片,如下:


下面介绍MySQL的两个函数:

CONCAT()函数

【作用】
  将多个字段链接成一个字符串(主要用于连接不同字段的)

【使用方法】

  • 默认连接字段之间没有分隔符:
  • 使用特定分隔符分割,如使用“,”逗号分割,使用CONCAT_WS()函数:

  这个函数实际中还没用过,但可定不是永远我上面举得例子,应该是这样的:表中有姓firstName字段和名称lastName字段,但返回结果要姓名,这时就可以用CONCAT()函数

【注意】

  • 网上说当要连接的字段中有一个字段的值为Null时,组合后的字符串就是NULL,但本人实验后并不是这样的,只是把为NULL的字段显示为NULL,其它的字段正常显示
  • oracle中CONCAT()只能连接两个字段,要想连接多个,可以嵌套使用CONCAT()



GROUP_CONCAT()函数

【作用】
  将分组中的值连接成一个字符串(所以要结合GROUP BY 使用),将该字符串返回(主要用于分组显示的)

【使用方法】

  • 默认连接字段之间用“,”逗号分隔:
  • 使用特定分隔符分割,如用“-”分割,这样将album_id和image组合到一起,并且以album_id分组显示
  • 联和使用GROUP_CONCAT和CONCAT
  • 可以限制连接后字符串的最大长度,超出这个长度后字段截取设置的最大长度的字符串,需要对系统参数进行设置:SET
    @@global.group_concat_max_len=40000;
  • 对连接后的分组字符串使用DISTINCT去重,这样就可以去掉重复的组合只保留一个相同组合
SELECT album_id,GROUP_CONCAT(DISTINCT image)  photo    
FROM image 
GROUP BY album_id
  • 对组合字符串进行排序,及组合字符串显示的顺序(字段组合顺序不变):
SELECT album_id,GROUP_CONCAT( album_id,id ORDER BY id ASC)  photo    
FROM image 
GROUP BY album_id
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值