- 对于统计字段,系统还提供了更加方便的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);