where方法的用法是thinkphp查詢語言的精髓,可以完成包括普通查詢、表示式查詢、快捷查詢、區間查詢、組合查詢在內的查詢操作。where方法的引數支援字串和陣列,雖然也可以使用物件但並不建議。
示例:
$user = m("user"); // 例項化user物件
$user->where('type=1 and status=1')->select();
相當於sql語句:select * from user where type=1 and status=1;
在thinkphp3.1版本以上時,建議配合預處理機制,確保更加安全,可以有效的防sql注入:
$model->where("username='%s' and password='%f'",array($username,$password))->select();
或者: $model->where("username='%s' and password='%f'",$username,$password)->select();
$user = m("user"); // 例項化user物件
$map['name'] = '張三';
$map['status'] = 1;
// 把查詢條件傳入查詢方法
$user->where($map)->select();
相當於sql語句:select * from user where `name`='張三' and status=1
sql運算子
例子實際查詢條件eq=
$map['id'] = array('eq',100);
等效於:$map['id'] = 100;
neq!=
$map['id'] = array('neq',100);
id != 100
gt>
$map['id'] = array('gt',100);
id > 100
egt>=
$map['id'] = array('egt',100);
id >= 100
lt<
$map['id'] = array('lt',100);
id < 100
elt<=
$map['id'] = array('elt',100);
id <= 100
like
like
$map['username'] = array('like','admin%');
username like 'admin%'
between
between and
$map['id'] = array('between','1,8');
id between 1 and 8
not between
not between and
$map['id'] = array('not between','1,8');
id not between 1 and 8
inin
$map['id'] = array('in','1,5,8');
id in(1,5,8)
not in
not in
$map['id'] = array('not in','1,5,8');
id not in(1,5,8)
and(預設)
and$map['id'] = array(array('gt',1),array('lt',10));
(id > 1) and (id < 10)
oror
$map['id'] = array(array('gt',3),array('lt',10), 'or');
(id > 3) or (id < 10)
xor(異或)
xor兩個輸入中只有乙個是true時,結果為true,否則為false,例子略。
1 xor 1 = 0
exp綜合表示式
$map['id'] = array('exp','in(1,3,8)');
$map['id'] = array('in','1,3,8');
exp 不是乙個運算子,而是乙個綜合表示式以支援更複雜的條件設定。exp 的操作條件不會被當成字串,可以使用任何 sql 支援的語法,包括使用函式和欄位名稱。
1、實現不同字段相同的查詢條件
$user = m("user"); // 例項化user物件
$map['name|title'] = '張三';
// 把查詢條件傳入查詢方法
$user->where($map)->select();
相當於sql語句:name= '張三' or title = '張三'
2、實現不同字段不同的查詢條件
$user = m("user"); // 例項化user物件
$map['status&title'] =array('1','張三','_multi'=>true);
// 把查詢條件傳入查詢方法
$user->where($map)->select();
'_multi'=>true必須加在陣列的最後,表示當前是多條件匹配,相當於sql語句:status= 1 and title = '張三'
$user = m("user"); // 例項化user物件
$map['status&score&title'] =array('1',array('gt','0'),'張三','_multi'=>true);
// 把查詢條件傳入查詢方法
$user->where($map)->select();
相當於sql語句: status= 1 and score >0 and title = '張三'
注意:快捷查詢方式中「|」和「&」不能同時使用。
where方法支援對某個欄位的區間查詢,
$map['id'] = array(array('gt',1),array('lt',10)) ;
相當於sql語句:(`id` > 1) and (`id` < 10)
$map['id'] = array(array('gt',3),array('lt',10), 'or') ;
相當於sql語句: (`id` > 3) or (`id` < 10)
區間查詢的條件可以支援普通查詢的所有表示式,也就是說類似like、gt和exp這樣的表示式都可以支援。另外區間查詢還可以支援更多的條件,只要是針對乙個欄位的條件都可以寫到一起。
$map['name'] = array(array('like','%a%'), array('like','%b%'), array('like','%c%'), '張三','or');
相當於sql語句:(`name` like '%a%') or (`name` like '%b%') or (`name` like '%c%') or (`name` = '張三')
1、字串模式查詢(採用_string 作為查詢條件)
陣列條件還可以和字串條件混合使用,例如:
$user = m("user"); // 例項化user物件
$map['id'] = array('neq',1);
$map['name'] = 'ok';
$map['_string'] = 'status=1 and score>10';
$user->where($map)->select();
相當於sql語句:( `id` != 1 ) and ( `name` = 'ok' ) and ( status=1 and score>10 )
2、請求字串查詢方式
請求字串查詢是一種類似於url傳參的方式,可以支援簡單的條件相等判斷。
$map['id'] = array('gt','100');
$map['_query'] = 'status=1&score=100&_logic=or';
相當於sql語句:`id`>100 and (`status` = '1' or `score` = '100')
復合查詢相當於封裝了乙個新的查詢條件,然後併入原來的查詢條件之中,所以可以完成比較複雜的查詢條件組裝。復合查詢使用了_complex作為子查詢條件來定義,配合之前的查詢方式,可以非常靈活的制定更加複雜的查詢條件。
$where['name'] = array('like', '%張三%');
$where['title'] = array('like','%吃飯%');
$where['_logic'] = 'or';
$map['_complex'] = $where;
$map['id'] = array('gt',1);
相當於sql語句:( id > 1) and ( ( name like '%張三%') or ( title like '%吃飯%') )
where方法支援多次呼叫:
$map['a'] = array('gt',1);
$where['b'] = 1;
$model->where($map)->where($where)->where('status=1')->select();
多次的陣列條件表示式會最終合併,但字串條件則只支援一次。 thinkphp中查詢,where條件集合寫法
1 字串模式查詢 string 查詢多個 與 條件中巢狀 與 條件 陣列條件可以和字串條件 採用 string 作為查詢條件 混合使用,例如 user m user 例項化user物件 map id array neq 1 map name ok map string status 1 and sc...
thinkphp3 2 where 條件查詢
thinkphp3.2 where 條件查詢 在連貫操作中條件where的操作有時候自己很暈,所以整理下,有助於使用 查詢條件 支援的表示式查詢,tp不區分大小寫 含義 tp運算子 sql運算子 例子 實際查詢條件 等於 eq where id array eq 1 id 2 不等於 neq whe...
從EXCEL裡面拼接SQL的where條件in語句
希望從excel表裡面的某個字段 例如姓名,或者id欄位 拼接起來放進sql裡面的in。例如如下的excel 希望從裡面提取相關資訊來實現如下語句 select from dbo user reg where name in n 謝攀 n 郭春娜 n 朱雁春 n 彭明旭 n 呂承超 n 程婷婷 n ...