Mysql函数FIND_IN_SET()的使用方法

有了FIND_IN_SET这个函数。咱们能够设计一个如:一只手机便是智能机,又是Andriod系统的。mysql

好比:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 一、智能机,二、Andriod系统,三、小米系统,四、1000元如下sql

如今有条手机的记录便是1000元如下的,又是智能机,仍是Andriod的系统。ide

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。这个函数在第一个参数包含一个逗号(‘,’)时将没法正常运行。it

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

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

| 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()函数