在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言 这是我最近新接触到的一个函数, 我在项目中的使用场景是这样的: 有一个应用类型表,表中有parentId字段和parentIds字段,前者为父级id,后者为多级父级id,在库中都是varchar类型,parentIds由多个父级id拼接而成由","分隔. 组长告知我可以使用该函数,就去进行了了解与使用. 语法
定义
strlist:一个由英文逗号“,”链接的字符串,例如:"a,b,c,d",该字符串形式上类似于SET类型的值被逗号给链接起来。 示例:SELECT FIND_IN_SET('b','a,b,c,d'); //返回值为2,即第2个值 例子 有个文章表里面有个type字段,它存储的是文章类型,有 1头条、2推荐、3热点、4图文等等 。 这就可以使用 find_in_set 了。以下为引用的内容: select * from article where FIND_IN_SET('4',type) find_in_set()和in的区别: 弄个测试表来说明两者的区别 CREATE TABLE `tb_test` ( `id` int(8) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `list` varchar(255) NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin'); INSERT INTO `tb_test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin'); INSERT INTO `tb_test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu'); 原来以为mysql可以进行这样的查询: SELECT id,name,list from tb_test WHERE 'daodao' IN(list); -- (一) 实际上这样是不行的, 这样只有当list字段的值等于'daodao'时(和IN前面的字符串完全匹配),查询才有效,否则都得不到结果,即使'daodao'真的在list中。 再来看看这个: SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao'); -- (二) 这样是可以的。 这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。原因其实是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。 所以如果要让(一)能正确工作,需要用 find_in_set(): SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- (一)的改进版 总结 到此这篇关于mysql中find_in_set函数的基本使用方法的文章就介绍到这了,更多相关mysql find_in_set函数使用内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论