MySQL---查询某个字段内容中存不存在某个数据,与like不同(FIND_IN_SET(str,strlist))

定义:

  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 * fromtestwhere '测试' IN (list);
得到结果空值.
test2:sql = select * fromtestwhere FIND_IN_SET('测试',path);
得到三条数据。

顺便说一下TP中的用法的:

$map[]=['exp','FIND_IN_SET('.$uid.',path)'];
$paths=Db::table('member')->where($map)->select();

exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。

最后强调一下,字段中存的数据必须是以逗号隔开的数据,查询时,第一个参数不能带逗号。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章