前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL中FIND_IN_SET探险记

MySQL中FIND_IN_SET探险记

作者头像
php007
发布2019-08-05 15:02:37
1.8K0
发布2019-08-05 15:02:37
举报
文章被收录于专栏:PHP专享栏PHP专享栏

1、业务背景

公司的业务需求是需要分权限分等级的获取不同的内容,因为原来的角色,权限,分组表已经建好,但是又要实现不同产品需要不同等级不同分组的人员管理,在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,查找资料后发现涉及到数据库的特有函数,候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。

2、表设计

数据库字段部分截图:

代码语言:javascript
复制
SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (102,ancestors)
代码语言:javascript
复制
疑问01:where 后面这跟的是条件吗?

疑问02:find_in_set()这怎么用呢?

3、探得究竟

贴图:

代码语言:javascript
复制
SELECT t.dept_id FROM sys_dept t WHERE  0
代码语言:javascript
复制
SELECT t.dept_id FROM sys_dept tWHERE  -1
代码语言:javascript
复制
SELECT t.dept_id FROM sys_dept t WHERE  12

问题总结


其实我们大家都知道,where 后面跟随各种查询条件,但是从来没有这么写过,即便是应对开发,也很少有人写到。其实where 类似于 if 就是对条件的判断,返回 true or false。在检索过程中,将满足条件的,即条件为true的结果返回。where能实现类型转换,这一点十分类似JavaScript中的if语句的用法。

4、原来如此

众里寻它千百度,sodesiga,好吧!原来就是个这。

FIND_IN_SET(str,strlist)

第一个参数str是要查找的字符串。

第二个参数strlist是要搜索的逗号分隔的字符串列表。

贴图:

代码语言:javascript
复制
SELECT FIND_IN_SET(1,1)

刚说好的字符串,你就给我来个这

,mysql你怎么可以这么随意呢!

以上图示,有劳读友自行总结

代码语言:javascript
复制
SELECT t.dept_id,t.parent_id,t.ancestors
FROM sys_dept t WHERE 
FIND_IN_SET (dept_id,'100,101,102,')

dept_id,依次等于100,101,102的结果,返回。类似于In 集合操作

代码语言:javascript
复制
SELECT t.dept_id,t.parent_id,t.ancestors 
FROM sys_dept t WHERE 
dept_id  in (100,101,102)

5、FIND_IN_SET和like的区别

like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 风帆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档