MySQL 一个字段多个id查询

这是一个很脑抽的问题,这个cate_id字段太脑抽了

举个栗子

表t_goods结构如下:

表t_goods_cate结构如下:

 

查询结构 要将cate_id内的值变为t_goods_catename

挺蛋疼的  为毛要‘ ,1,3,17, ’ 这种奇葩方式存数据

先把sql 堆上去……

SELECT id,( SELECT GROUP_CONCAT(c.name) FROM `t_goods_cate` AS c WHERE FIND_IN_SET(c.id,s.cate_id) ) FROM `t_goods` AS s

效果:

 

这里面涉及到两个函数GROUP_CONCATFIND_IN_SET

1. GROUP_CONCAT

GROUP_CONCAT(expr) 函数会从 expr 中连接所有非 NULL 的字符串。如果没有非 NULL 的字符串,那么它就会返回 NULL。语法如下:

GROUP_CONCAT(DISTINCT expression ORDER BY expression SEPARATOR sep);

可以分类,可以自定义间隔符(默认,),同时该函数有长度限制默认值是 1024),栗子……自行脑补……

官方文档:https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

中文帖子:https://www.jianshu.com/p/447eb01eebb2

2. FIND_IN_SET

SELECT FIND_IN_SET(  'b' , 'a,b,c,d' );

文档直意:如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。 字符串列表是由字符串分隔的子字符串组成的字符串。 如果第一个参数是常量字符串而第二个参数是SET类型的列,则FIND_IN_SET()函数被优化为使用位算术。 如果str不在strlist中,或者strlist是空字符串,则返回0。 如果任一参数为NULL,则返回NULL。 如果第一个参数包含逗号(,)字符,则此函数无法正常工作。

官方文档:https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set

速度方面  IN > FIND_IN_SET,至于是否支持索引目前没有找到可以参照的……

具体见博客:关于 find_in_set 的性能问题

Mysql的find_in_set函数超大数据量下的优化

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值