mysql中,case when end和FIND_IN_SET

 

今天在改项目中的bug看到了别人写的sql,自己还是菜只会增删改差,看到这些sql的逻辑处理和函数自己还是不会,于是在这里记录一下。
首先我们先了解一下这个需求,感觉工作以后抛开需求的讲解代码都是在耍流氓。

需求

在这里我们主要是实现一个条件查询,然后一起实现一个模糊查询,在这里涉及到权限的部分,一个用户可能会有多个角色,所以我们要判断他权限0-无 1-监管 2-发起 3-全部,然后根据传入的值就行一个条件判断
我们来分析一下这个查询

  • 首先摆在我们面前的是case when then,我们来讲解一下这个是用来干什么的,其实就是一个条件的判断,case when then when then else end as other,case就是开始这个逻辑,然后when后面的条件通过了就直接到end,否则就是下面的when,当所有的end走完了就是最后的else,然后是最后的end,这就像是switch,然后将我们then或者else后的值付给end后面的变量,不过 end后面可以不加as。
  • 带入到我们的逻辑中来说,permissionMark这个变量是3或2或1或0,我们要减少对于sql的请求,这一点我还是很薄弱的。
  • FIND_IN_SET,这个函数是用来判断是否存在的,前边的字符串是否在后面的字符串里面存在,例如说SELECT FIND_IN_SET('b', 'a,b,c,d');就是说b在abcd中是第二个,也就是说这个函数的作用是,前边的元素在后面的元素中的话,就会将在元素中的位数显示出来,如果不在就是显示0,
  • 然后就是一个小小的提醒,不是所有的条件查询加模糊查询就是like就完事了,还有加上%,%的作用是出现的位置,如果是like%a%,就是说在a可以在在任何的位置,而%a,就是说所有的以a结尾的数据。

你可能感兴趣的:(mysql)