mysql|【find_in_set】SQL中查找某个特定字符串出现在指定字段(N子链)中的位置

【mysql|【find_in_set】SQL中查找某个特定字符串出现在指定字段(N子链)中的位置】在mysql数据库中,我们会经常用到in语法,用来查找某个字段包含N子链中的一个或多个字符串,如:

select*fromtablewhereid in('1,2,3,4');

但如果某个字段本身是存储的N子链,然后需要查出其中拥有某个特定值呢?这种需求在数据分发中经常出现。
比如说有这么一个表:
mysql|【find_in_set】SQL中查找某个特定字符串出现在指定字段(N子链)中的位置
文章图片

见名知义,其中tags代表文章的标签,分别用数字1,2,3,4……来代表文章的标签,如php,mysql,js,java等,一篇文章可能会有多个标签,那么怎么来查找特定标签呢?如果用like,那么可能会存在查询错误的情况(比如实际要匹配的是1,结果查出来10、11、21等),这个时候就需要用到find_in_set了。
select * from article where find_in_set(1,tags)

这个SQL会返回tags字段中包含字符串’1’的所有记录。
find_in_set(str,strlist)
str表示想要查找的字符串
strlist表示需要匹配的字段,存储形如1,2,3,…或a,b,c,…这样的N子链
函数返回的是str字符串在strlist中出现的位置
*说明:find_in_set与in在作用上有一定的交集,而且in可以有效使用索引,所以效率会更高,所以在能满足需求的情况下,尽量使用in,但find_in_set能补充in的一些不足。

    推荐阅读