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)