专栏首页PHP专享栏MySQL中FIND_IN_SET探险记

MySQL中FIND_IN_SET探险记

1、业务背景

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

2、表设计

数据库字段部分截图:

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

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

3、探得究竟

贴图:

SELECT t.dept_id FROM sys_dept t WHERE  0
SELECT t.dept_id FROM sys_dept tWHERE  -1
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是要搜索的逗号分隔的字符串列表。

贴图:

SELECT FIND_IN_SET(1,1)

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

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

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

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 集合操作

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查询的结果。

本文分享自微信公众号 - 风帆(wdswhf),作者:feng

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • TP5 where数组查询(模糊查询--多个查询条件)

    上表中的 exp 不是一个运算符,而是一个综合表达式以支持更复杂的条件设置。exp 的操作条件不会被当成字符串,可以使用任何 SQL 支持的语法,包括使用函数和...

    php007
  • TP5 多条件whereOr查询数据库

    其中 $map 是一个普通的数组变量,可以根据自己需求而命名。上述格式中的表达式实际是运算符的意义:

    php007
  • PHP中$_SERVER详解参数&说明

    1、cli模式(命令行)下,第一个参数$_SERVER['argv'][0]是脚本名,其余的是传递给脚本的参数

    php007
  • 3分钟短文 | Laravel如何改造复杂的多表联合查询,这很高效!

    今天我们来说一下laravel框架里最常用的数据库模型操作,特别是功能复杂的应用程序, 往往会拆分出许多的业务表,关联表,在时间和空间上进行权衡。

    程序员小助手
  • Angular应用一个创建场景的问题分析

    Hero detail页面,基于的属性是这个加了@Input annotation的hero:

    Jerry Wang
  • 零基础使用Django2.0.1打造在线教育网站(十六):列表分页功能

    努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

    编程思录
  • Android自定义图文跑马灯效果

    之前的需求是用FlipperView来实现上下翻动效果,但是发现数据有点长会造成一屏幕放不下三条数据,后来改为跑马灯,但是只有文字的跑马灯TextView自己就...

    砸漏
  • Python记录日志的方法

    日志不管对于开发或者运维都是一项非常重要的东西,它可以用来排错,解决故障,统计分析等。

    py3study
  • 使用lumpy进行CNV检测

    每种算法都要其优势和不足之处,综合运用多种策略有助于提高检测的灵敏度,lumpy就是这样一款软件,集合了read-pair,split-read,read-de...

    生信修炼手册
  • Power Designer数据库建模工具,正向、逆向工程

    现在我们来使用Power Designer这个工具设计数据库。首先打开Power Designer这个工具,点击【文件】菜单,在下拉框中选中【建立新模型】,如下...

    故久

扫码关注云+社区

领取腾讯云代金券