有了FIND_IN_SET这个函数。我们可以设计一个如:一只手机即是智能机,又是Andriod系统的。

比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1、智能机,2、Andriod系统,3、小米系统,4、1000元以下

现在有条手机的记录即是1000元以下的,又是智能机,还是Andriod的系统。

type中以 4,1,2的格式存储.

那们我们如何用sql查找所有type中有4的1000元以下的手机呢,

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

先看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');

+----------------------------+

| FIND_IN_SET('b','a,b,c,d') |

+----------------------------+

|                          2 |

+----------------------------+

1 row in set (0.00 sec)

用起来很简单

就以上面我说到的情况来举例:

以下为实际应用当中的SQL语句:

select * from mobile where FIND_IN_SET('4',type);

这个就可以找出所有1000元以下手机的记录!

______________________________________________________________________________________________________________

查询表字段 pingid = (1,2,3,)

SELECT * FROM `linkinfo` WHERE `pingid` REGEXP '{id},' AND `pingid` NOT REGEXP '[[:alnum:]]+{id},'   使用上面的语句,可以查询出来

用FIND_IN_SET() 更简单

SELECT
*
FROM linkinfo WHERE
FIND_IN_SET(
'1',
pingid
)

原来以为mysql可以进行这样的查询
select id, list, name from table where 'daodao' IN (list);      (一)
注:1. table含有三个字段id:int, list:varchar(255), name:varchar(255)

实际上这样是不行的,这样只有当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()函数

Mysql函数FIND_IN_SET()的使用方法的更多相关文章

  1. MySQL函数find_in_set介绍

    MySQL函数find_in_set介绍 数据库中的某个字段我十以字符存储的,同时又以","隔开的.如果想要查询这个字段中包含某个字符串该怎么查询?使用like?感觉不妥,如果使用 ...

  2. mysql中FIND_IN_SET的使用方法

    在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_ ...

  3. coding++ :MySQL函数——FIND_IN_SET()

    语法:FIND_IN_SET(str,strlist) 定义: 1). 假如字符串 str 在由N子链组成的字符串列表 strlist 中,则返回值的范围在1到N之间. 2). 一个字符串列表就是一个 ...

  4. mysql函数find_in_set()

    SELECT FIND_IN_SET('b','a,b,c,d'); 结果:2 SELECT * from video where find_in_set(id,'1,2,3,4'); 查找id在‘1 ...

  5. mysql中find_in_set()函数的使用

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...

  6. MySQL的FIND_IN_SET()函数

    今天在做项目时,看到了一个从没见过的MySQL函数——FIND_IN_SET(),顿时就产生了浓郁的兴趣,然后就搜了搜,翻了翻. 语法:FIND_IN_SET(str,strlist) 定义: 1. ...

  7. MySQL 的 find_in_set 函数使用方法

    举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文...1,12,13 等等 . 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1, ...

  8. mysql 的 find_in_set函数使用方法

    举个例子来说: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1 ...

  9. (转)mysql 的 find_in_set函数使用方法

    举个例子来说: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1 ...

随机推荐

  1. ZOJ2006 (后缀自动机)

    求一个字符串的最小表示法. 将字符串S倍长,从根走length(s)步所走路径即为最小表示法. 记所到达位置为x,则这个最小表示法的起点为a[x]-len(s)+1 ; var T:longint; ...

  2. 【转】C 宏

    http://www.cs.yale.edu/homes/aspnes/pinewiki/C%282f%29Macros.html See KernighanRitchie Appendix A12. ...

  3. JS的强大

    JS很强大,对于网页设计者来说,会用JS真的很重要. 学好我的linux,和数据结构.

  4. xp 安装 win7 64

    1.Win7文件准备 (1)下载Win7 的ISO文件到本机硬盘中 (2)用UltraISO等软件加载ISO文件,将win7目录下的bootmgr和boot文件夹复制到C盘根目录下,并在C盘 根目录下 ...

  5. dedecms 按照栏目指定的id排序

    方法: 1.打开include/taglib/channelartlist.lib.php,找到大约78行,把 代码如下(一定要注意表名一致): $dsql->SetQuery("SE ...

  6. centos6.4安装配置vpn服务器步骤详解

      centos6.4安装配置vpn服务器步骤详解,从安装VPN到配置VPN服务器.配置VPN服务器的路由转发功能,每一步都很详细   一.VPN服务器环境说明 操作系统:CentOS release ...

  7. 2015GitWebRTC编译实录7

    2015.07.20 libvoiceengine 编译通过去除了mock测试代码,mock是用来进行测试的,意义不大.另外会报一个常量错误,需要定义WEBRTC_MAC宏,只定义WEBRTC_IOS ...

  8. 《Java程序设计》第二次实验报告

    20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ...

  9. Windows Server 2012学习文档

    1.Windows Server 2012版本 Windows Server 2012 实际只有两个版本(标准版和数据中心版),其他仅是OEM的相关名称 这两个版本的功能内容完全一样,唯一不同的是标准 ...

  10. C中的基本数据类型和变量

    C语言中的数据类型 基本数据类型 1) 整型 (int   %d) 2) 字符型 (char  %c) 3) 浮点型 %d ①. 单精度浮点型(float) ②. 双精度浮点型(double) 2.指 ...