Thinkphp笔记---查询方式

  • 对于统计字段,系统还提供了更加方便的setInc和setDec方法。eg:
  $User = M("User"); // 实例化User对象
    $User->where('id=5')->setInc('score',3); // 用户的积分加3
    $User->where('id=5')->setInc('score'); // 用户的积分加1
    $User->where('id=5')->setDec('score',5); // 用户的积分减5
    $User->where('id=5')->setDec('score'); // 用户的积分减1

          查询方式

          一、使用字符串作为查询条件,这是最传统的方式,但是安全性不高,例如:

          $User = M("User"); // 实例化User对象
          $User->where('type=1 AND status=1')->select();
          最后生成的SQL语句是
          SELECT * FROM think_user WHERE type=1 AND status=1

          二、使用数组作为查询条件,eg:
          $User = M("User");
          $condition['name'] = 'thinkphp';
          $condition['status'] =1;
          $User->where($condition)->select();
          最后生成的SQL语句:
          Select* from think_user where 'name'='thinkphp' AND 'status' =1

          如果进行多字段查询,那么字段之间的默认逻辑关系是逻辑与 AND ,可以使用下面的规则进行修改,
          $condition['_logic'] = 'OR';

          三、使用对象方式来查询
          这是以stdClass内置对象为例:
          $User = M("User");
          $condition->name = 'thinkphp';
          $condition->status =1 ;
          $User->where($condition)->select();


          表达式查询

          ThinkPHP查询语言的精髓,查询表达式的使用格式:
          $map['字段名'] = array('表达式','查询条件');
          表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
          表达式含义
          EQ等于(=)
          NEQ不等于(<>)
          GT大于(>)
          EGT大于等于(>=)
          LT小于(<)
          ELT小于等于(<=)
          LIKE模糊查询
          [NOT] BETWEEN(不在)区间查询
          [NOT] IN(不在)IN 查询
          EXP表达式查询,支持SQL语法

          示例 :
          $map['id'] = array('eq',100);
          等效于:
          $map['id'] = 100;

          [NOT] LIKE: 同SQL的like :

          $map['name'] = array('like','thinkphp%');   //注意%的使用

          如果配置了DB_LIKE_FIELDS参数的话,某些字段也会自动进行模糊查询。
          例如:
          'DB_LIKE_FIDLDS'=>'title|content'
          $map['title'] = 'thinkphp'   就变成  title like '%thinkphp%'
           
          支持数组方式:

          $map['a'] = array('like', array('thinkphp%','tp%'),'OR');

          $map['b'] = array('notlike',array('thinkphp%','tp%'),'AND');

          生成的查询条件:
          (a like 'thinkphp%' OR a like 'tp%') AND (b notlike 'thinkphp%' AND b notlike 'tp%');

          [NOT]BETWEEN: 同sql的between,条件查询支持字符串或者数组,例如:

          $map['id'] = array('between','1,8');
          和下面的等效:
          $map['id'] = array('between',array('1','8'));
          查询条件就变成了id BETWEEN 1 AND 8

          EXP: 表达式,支持复杂的查询情况

          $map['id'] = array ('in','1,3,8');
          可以改成:
          $map['id'] = array('exp', 'in(1,3,8)');
          exp查询的条件不会被 当成 字符串,所以后面的查询条件 可以使用任何SQL支持的语法,包括使用函数和字段名称.查询表达式用于查询条件 ,也可以用于数据更新:
          ​$User = M("User");
          $data['name'] = 'thinkphp';
          $data['score']  = array('exp','score+1');
          $User->where('id=5')->save($data);







          原文地址:https://www.cnblogs.com/fansino/p/3594308.html