mysql_find_in_set(str,strList),为什么and和or连用时出来的不是自己想要的数据

find_in_set是一个很好用的函数,这里先做一个简单的使用说明

如果你数据表中的参数有一个字段a,是用逗号(,)隔开的数据,例如:,0,2,216549, 

而且你想查询返回字段a中包含2的数据,就可以用到这个函数

使用起来很简单

find_in_set(str,strList)

需要传递两个参数,你想要查询包含的数,还有字段a

像这样:

SELECT *
FROM user
WHERE find_in_set(2,a)

select * 是我为了方便写的,实际上还是不可取的,select后面返回字段还是需要什么写什么,这里面有sql执行效率的问题

这样就可以查出来你a字段里包含2的数据

 

在实际业务中,我又用到了and和or跟find_in_set一起查询

像这样:

SELECT *
FROM user
WHERE id = 20 OR id = 100
AND find_in_set(2,a)

结果我发现查询返回的数据中多了很多没有用的数据,

一开始我一度以为是这些字段不可以一起用的问题,后来才发现并不是...

问题出现在and和or的优先级上面

and的优先级要比or高,就导致执行条件的时候and是先执行的

本来我是想查id为20 或者 id为100的数据 并且a字段包含2的数据

结果我这样写就成了id为100 并且 a字段包含2 和 id为20的数据,就导致多了很多没用的数据

所以说and和or连用的时候,要考虑到自身的业务场景

像我这种情况,就应该在连用的时候在or外面包上一层括号

像这样:

SELECT *
FROM user
WHERE (id = 20 OR id = 100)
AND find_in_set(2,a)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你过来啊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值