MySQL---查询某个字段内容中存不存在某个数据,与like不同
(FIND_IN_SET。。。
定义:
1. 假如字符串str在由N⼦链组成的字符串列表strlist中,则返回值的范围在1到N之间。
2. ⼀个字符串列表就是⼀个由⼀些被‘,’符号分开的⾃链组成的字符串。
3. 如果第⼀个参数是⼀个常数字符串,⽽第⼆个是typeSET列,则FIND_IN_SET()函数被优化,使⽤⽐特计算。
4. 如果str不在strlist或strlist为空字符串,则返回值为0。
5. 如任意⼀个参数为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 test where '测试' IN (list);
得到结果空值.
test2:sql = select * from test where FIND_IN_SET('测试',path);
得到三条数据。
顺便说⼀下TP中的⽤法的:
$map[]=['exp','FIND_IN_SET('.$uid.',path)'];
$paths=Db::table('member')->where($map)->select();
exp查询的条件不会被当成字符串,所以后⾯的查询条件可以使⽤任何SQL⽀持的语法,包括使⽤函数和字段名称。
最后强调⼀下,字段中存的数据必须是以逗号隔开的数据,查询时,第⼀个参数不能带逗号。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论