mysql数据库中find_in_set()和in()用法区别

转载 2015年07月10日 12:00:59

在mysql中in可以包括指定的数字,而find_in_set()用于特定的数据类型,下面我来给大家介绍关于find_in_set()和in()用法区别,希望对大家所有帮助。

find_in_set 函数使用方法   


个例子来说:

有个文章表里面有个type字段,它存储的是文章类型,有 1头条、2推荐、3热点、4图文...1,12,13 等等 。

现在有篇文章他既是 头条,又是热点,还是图文,

type中以 1,3,4 的格式存储。

那我们如何用sql查找所有type中有4图文标准的文章呢??

这就要我们的 find_in_set 出马的时候到了。

以下为引用的内容:

 代码如下 复制代码

select * from article where FIND_IN_SET('4',type)

----------------------------------------------------------

MySQL手册中find_in_set函数的语法:

 代码如下 复制代码

FIND_IN_SET(str,strlist)

假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。

一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。

如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

 代码如下 复制代码

mysql> SELECT FIND_IN_SET('b', 'a,b,c,d');

-> 2 因为b 在strlist集合中放在2的位置 从1开始

--------------------------------------------------------

select FIND_IN_SET('1', '1');  返回 就是1 这时候的strlist集合有点特殊 只有一个字符串 其实就是要求前一个字符串 一定要在后一个字符串集合中 才返回 大于0的数

 代码如下 复制代码

select FIND_IN_SET('2', '1,2'); 返回2

select FIND_IN_SET('6', '1');  返回0

----------------------------------------------------------

注意:

 代码如下 复制代码

select * from treenodes where FIND_IN_SET(id, '1,2,3,4,5');

使用find_in_set函数一次返回多条记录

id 是一个表的字段,然后每条记录分别是id等于1,2,3,4,5的时候

有点类似in (集合)

 代码如下 复制代码

select * from treenodes where id in (1,2,3,4,5);


弄个测试表来说明两者的区别

 代码如下 复制代码

CREATE TABLE `test` (
  `id` int(8) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `list` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
)


INSERT INTO `test` VALUES (1, 'name', 'daodao,www.111cn.net,xiaoqin');
INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,www.111cn.net');


原来以为MySQL可以进行这样的查询:

 代码如下 复制代码
select id, list, name from table where 'daodao' IN (list);

(一)

实际上这样是不行的,这样只有当name是list中的第一个元素时,查询才有效,否则都得不到结果,即使'daodao'真的在list中。

再来看看这个:

 代码如下 复制代码
select id, list, name from table where 'daodao' IN ('libk', 'zyfon', 'daodao');

(二)

这样是可以的。

----------------------------------------------------------------

这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。

原因其实是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。

所以如果要让(一)能正确工作,需要用find_in_set():

 代码如下 复制代码
select id, list, name from table where find_in_set('daodao',list);

(一)的改进版。

总结:

所以如果list是常量,则可以直接用IN, 否则要用find_in_set()函数。

原文地址:http://www.111cn.net/database/mysql/50190.htm

mysql中FIND_IN_SET()用法以及与in()的区别

mysql中如何使用FIND_IN_SET(),以及使用FIND_IN_SET()注意的地方,还有F第二世界整理发布IND_IN_SET()与in()的使用区别。 在mysql中查询表字段 pi...
  • ypb455360299
  • ypb455360299
  • 2012年10月09日 10:31
  • 4900

Mysql中in和find_in_set的使用说明

在使用in函数的时候,发现查询的数据少了两条,查过资料才找到原因,跟大家分享一下! 原来以为mysql可以进行这样的查询 1】t_bdp_indices_user_info的表结构: ...
  • gengxiaoming7
  • gengxiaoming7
  • 2015年09月09日 11:12
  • 2474

SQL 语句中的in、find_in_set、like的区别

SQL 语句中的in、find_in_set、like的区别
  • nianzhi1202
  • nianzhi1202
  • 2016年11月19日 11:31
  • 8679

谈一谈MySQL的LOCATE、FIND_IN_SET、INSTR、POSITION的差别

1、LOCATE(substr,str) , LOCATE(substr,str,pos)  第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串 str中子字符...
  • qq_27682041
  • qq_27682041
  • 2017年06月23日 16:13
  • 1556

mysql 的 find_in_set,INSTR函数使用方法

mysql中INSTR函数的用法 INSTR(字段名, 字符串) 这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) SELE...
  • xy2204
  • xy2204
  • 2015年12月28日 18:42
  • 1326

Hive实战 函数Find_in_set

集合查找函数: find_in_set 语法: find_in_set(string str, string strList)  返回值: int 说明: 返回str在strlist第一次出现的...
  • qiezikuaichuan
  • qiezikuaichuan
  • 2015年03月09日 11:07
  • 2680

Laravel find in set排序

做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列。 例如,用户状态有四种: 0=>未激活;1=>正常;2=>禁用;3=>软删除 现在的需求是,我要按照:正常》未激活》禁用》删除;这个...
  • zhezhebie
  • zhezhebie
  • 2017年10月26日 18:44
  • 469

MySQL函数-- FIND_IN_SET的使用

原文链接:点击打开链接 FIND_IN_SET(str,strlist) 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 ...
  • u014042146
  • u014042146
  • 2016年05月15日 15:45
  • 1239

mysql position,find_in_set ,location,instr 区别

表A   字段b 查询表
  • muzizhuben
  • muzizhuben
  • 2014年11月05日 11:21
  • 3511

mysql 中 find_in_set()

mysql 中 find_in_set() 方法:有时候我们在设计数据库时有以下情况,如:在视频表中有个字段week, 他存储的是视频在周几播放,如某视频只在周1,4,6播放,那么week字段对应的值...
  • u013372487
  • u013372487
  • 2017年06月10日 22:23
  • 560
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql数据库中find_in_set()和in()用法区别
举报原因:
原因补充:

(最多只允许输入30个字)