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

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

  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/shx1024/p/11931219.html
Copyright © 2011-2022 走看看