Thinkphp中where 條件的使用

2021-10-01 19:19:31 字數 4882 閱讀 2060

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 ...