定义:
- 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间。
- 一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。
- 如果第一个参数是一个常数字符串,而第二个是typeSET列,则FIND_IN_SET()函数被优化,使用比特计算。
- 如果str不在strlist或strlist为空字符串,则返回值为0。
- 如任意一个参数为NULL,则返回值为NULL。
这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
strlist:一个由英文逗号“,”链接的字符串,例如:“a,b,c,d”,该字符串形式上类似于SET类型的值被逗号给链接起来。
示例:SELECT FIND_IN_SET(‘b’,‘a,b,c,d’); //返回值为2,即第2个值
测试代码:
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`path` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `test` VALUES (1, '张三', '测试,实验,结束');
INSERT INTO `test` VALUES (2, '李四', '结束,测试,实验');
INSERT INTO `test` VALUES (3, '王五', '实验,结束,测试');
test1:sql = select * from
testwhere '测试' IN (list);
得到结果空值.
test2:sql = select * from
testwhere FIND_IN_SET('测试',path);
得到三条数据。
顺便说一下TP中的用法的:
$map[]=['exp','FIND_IN_SET('.$uid.',path)'];
$paths=Db::table('member')->where($map)->select();
exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。
最后强调一下,字段中存的数据必须是以逗号隔开的数据,查询时,第一个参数不能带逗号。