- 对于统计字段,系统还提供了更加方便的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 | 不等于&#xff08;<>&#xff09; |
GT | 大于&#xff08;>&#xff09; |
EGT | 大于等于&#xff08;>&#61;&#xff09; |
LT | 小于&#xff08;<&#xff09; |
ELT | 小于等于&#xff08;<&#61;&#xff09; |
LIKE | 模糊查询 |
[NOT] BETWEEN | &#xff08;不在&#xff09;区间查询 |
[NOT] IN | &#xff08;不在&#xff09;IN 查询 |
EXP | 表达式查询&#xff0c;支持SQL语法 |
示例 :
$map[&#39;id&#39;] &#61; array(&#39;eq&#39;,100);
等效于&#xff1a;
$map[&#39;id&#39;] &#61; 100;
[NOT] LIKE: 同SQL的like :
$map[&#39;name&#39;] &#61; array(&#39;like&#39;,&#39;thinkphp%&#39;); //注意%的使用
如果配置了DB_LIKE_FIELDS参数的话&#xff0c;某些字段也会自动进行模糊查询。
例如&#xff1a;
&#39;DB_LIKE_FIDLDS&#39;&#61;>&#39;title|content&#39;
$map[&#39;title&#39;] &#61; &#39;thinkphp&#39; 就变成 title like &#39;%thinkphp%&#39;
支持数组方式:
$map[&#39;a&#39;] &#61; array(&#39;like&#39;, array(&#39;thinkphp%&#39;,&#39;tp%&#39;),&#39;OR&#39;);
$map[&#39;b&#39;] &#61; array(&#39;notlike&#39;,array(&#39;thinkphp%&#39;,&#39;tp%&#39;),&#39;AND&#39;);
生成的查询条件:
(a like &#39;thinkphp%&#39; OR a like &#39;tp%&#39;) AND (b notlike &#39;thinkphp%&#39; AND b notlike &#39;tp%&#39;);
[NOT]BETWEEN: 同sql的between,条件查询支持字符串或者数组,例如:
$map[&#39;id&#39;] &#61; array(&#39;between&#39;,&#39;1,8&#39;);
和下面的等效:
$map[&#39;id&#39;] &#61; array(&#39;between&#39;,array(&#39;1&#39;,&#39;8&#39;));
查询条件就变成了id BETWEEN 1 AND 8
EXP: 表达式,支持复杂的查询情况
$map[&#39;id&#39;] &#61; array (&#39;in&#39;,&#39;1,3,8&#39;);
可以改成:
$map[&#39;id&#39;] &#61; array(&#39;exp&#39;, &#39;in(1,3,8)&#39;);
exp查询的条件不会被 当成 字符串,所以后面的查询条件 可以使用任何SQL支持的语法,包括使用函数和字段名称.查询表达式用于查询条件 ,也可以用于数据更新&#xff1a;
$User &#61; M("User");
$data[&#39;name&#39;] &#61; &#39;thinkphp&#39;;
$data[&#39;score&#39;] &#61; array(&#39;exp&#39;,&#39;score&#43;1&#39;);
$User->where(&#39;id&#61;5&#39;)->save($data);
来自为知笔记(Wiz)