zoukankan      html  css  js  c++  java
  • 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支持的语法,包括使用函数和字段名称。

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

  • 相关阅读:
    打开虚拟机导致电脑蓝屏
    jmeter访问接口后返回的数据乱码
    使用jmeter批量对新增账号初始化操作
    使用jmeter参数化时在数据中匹配11位的手机号并分组操作
    vsphere vdp备份情况导出
    grep的完全匹配(不是-w)
    win10右键新建md文件,亲测有效
    信步漫谈之Wiki知识库——搭建dokuwiki
    vim操作学习
    writev函数
  • 原文地址:https://www.cnblogs.com/shx1024/p/11931219.html
Copyright © 2011-2022 走看看