• 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支持的语法,包括使用函数和字段名称。

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

  • 相关阅读:
    centos 7 安装maven
    linux添加用户
    intellij添加jar包
    mysql用户管理
    centos7 mariaDB安装
    hibernate入门实例
    Linux文件描述符
    Python小爬虫实例
    IO流-文件管理
    IO流-ZIP文档
  • 原文地址:https://www.cnblogs.com/shx1024/p/11931219.html
Copyright © 2020-2023  润新知