ThinkPHP3快速入門教程三:查詢語言

來源:互聯網
上載者:User

標籤:不能   資料庫   處理   簡介   otl   save   大於等於   between   strong   

一、查詢語言簡介:

 

ThinkPHP內建了非常靈活的查詢方法,可以快速的進行資料查詢操作,查詢條件可以用於讀取、更新和刪除等操作,主要涉及到where方法等連貫相關方法操作即可,

此架構查詢系統可以解決不同資料庫的差異性,因些我們把架構的這一查詢方式稱之為查詢語言。使其查詢操作更加簡單易懂。

 

二、查詢方式:

ThinkPHP可以支援直接使用字串作為查詢條件,但是大多數情況推薦使用索引數組或者對象來作為查詢條件,因為會更加安全。

 

1、使用字串作為查詢條件(最傳統的方式,但是安全性不高),例如:

$User = M(“User”); //執行個體化User對象

$User -> where(‘type=1 AND status=1’) -> select();

產生SQL語句:SELECT *FORM think_user WHERE type=1 AND status=1;

注意:採用字串查詢的時候,我們可以配合使用新版提供的字串條件的安全預先處理機制。

2、使用數組作為查詢條件

這種方式是最常用的查詢方式,例如:

$User = M(“User”); //執行個體化User對象

$condition[‘name’] =’thinkphp’;

$condition[‘status’] = 1;

//把查詢條件傳入查詢方法

$user -> where($condition) -> select();

//產生的SQL語句

SELECT*FORM think_user WHERE ‘name’ = ‘thinkphp’ AND status=1;

如果進行多欄位查詢,那麼欄位之間的預設邏輯關係是邏輯與AND,但是用下面的規則可以更改預設的邏輯判斷,通過使用_logic定義查詢邏輯:

$User = M(“user”); //執行個體化User對象

$condition[‘name’] = ‘thinkphp’;

$condition[‘account’] = ‘thinkphp’;

$condition[‘_logic’] = ‘OR’;

//把查詢條件傳入查詢方法

$User -> Where($condition)->select();

產生的SQL語句:SELECT * FROM think_user WHERE `name`=‘thinkphp‘ OR `account`=‘thinkphp‘;

 

3、使用對象方式來查詢

這裡以stdClass內建對象為例:

$User = M(“User”); //執行個體化User對象

//定義查詢條件

$condition = new stdClass();

$codition -> name= ’thinkphp’;

$codition -> status = 1;

$User -> where($condition) ->select();

產生的SQL語句:SELECT * FROM think_user WHERE `name`=‘thinkphp‘ AND status=1

使用對象方式和數組方式來查詢資料是一樣的,大多數情況下,建議使用數組方式更加高效。

 

三、運算式查詢:

ThinkPHP查詢語言的精髓,查詢運算式的使用格式:

$map[‘欄位名’] = array(‘運算式’,‘查詢條件’);

運算式不分大小寫,支援的查詢運算式有下面幾種,分別表示的含義是:

 

樣本如下:

EQ:等於(=)

例如:

$map[‘id’] = array(‘eq’,100);

$map[‘id’] = 100;//和上面查詢等效

查詢條件為: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

 

[NOT]LIKE:同sql的LIKE

例如:

$map[‘name’] = array(‘like’,’thinkphp%’);

查詢條件:name like ‘thinkphp%’

 

如果配置了DB_LIKE_FIEKLDS參數的話,某些欄位也會自動進行模糊查詢。例如設定了:

‘DB_LIKE_FIELDS’參數的話,某些欄位也會自動進行模糊查詢。例如設定了:

‘DB_LIKE_FIELDS’ => ‘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 not like ‘%thinkphp%’ AND like ‘%tp’)

 

[NOT] BETWEEN : 同sql的[not]between,查詢條件支援字串或者數組,例如:

$map[‘id’] = array(‘between’,’1,8’);

$map[‘id’] = array(‘between’,array(‘1’,’8’)); //和上行語句等效

查詢條件就變成id BETWEEN 1 AND 8

 

[NOT]IN:同sql的[NOT]的in,查詢條件支援字串或者數組,例如:

$map[‘id’] = array(‘not in’,’1,5,8’);

$map[‘id’] = array(‘not in’,array(‘1’,’5’,’8’)); //和上條語句等效

查詢條件:id NOT IN(1,5,8)

 

EXP:運算式,支援更複雜的查詢情況

例如:$map[‘id’] = array(‘in’,’1,3,8’);

可改成:

$map[‘id’] = array(‘exp’,’IN(1,3,8)’);

Exp查詢的條件不會被當成字串,所以後面的查詢條件可以使用任何SQL支援的文法,

包括使用函數和欄位名稱。查詢運算式不僅可用於查詢條件,也可以用於資料更新,例如:

$User = M(“User”);   //執行個體化User對象

//要修改的資料對象屬性賦值

$data[‘name’] = ‘ThinkPHP’;

$data[‘score’] = array(‘exp’,’score+1’); //使用者的積分加1

$User->where(‘id=5’)->save($data); //根據條件儲存修改的資料

 

四、快捷查詢:

3.0版本開始,增加了快捷查詢方式,可以進一步簡化查詢條件的寫法,例如:

1、實現不同欄位相同的查詢條件

$User = M(“User”); //執行個體化User對象

$map[‘name|title’] = ‘thinkphp’;

//把查詢條件傳入查詢方法

$User->where($map)->select();

查詢條件:name= ’thinkphp’ OR title = ‘thinkphp’

 

2、實現不同欄位不同的查詢條件

$User = M(“user”); //執行個體化User對象

$map[‘status&title’]=array(‘1’, ’thinkphp’, ’_multi’=>true);

//把查詢條件傳入查詢方法

$User -> where($map) -> select();

‘_multi’ => true 必須加在數組的最後,表示當前是多條件匹配,這樣查詢條件就變成:status= 1 AND title= ’thinkphp’

查詢欄位支援最多的,例如:

$map[‘status&score&title‘] =array(‘1‘,array(‘gt‘,‘0‘),‘thinkphp‘,‘_multi‘=>true);

查詢條件變成:status= 1 AND score>0 AND title = ‘thinkphp’

 

注意:快捷查詢方式中”|”和”&”不能同時使用。

 

五、區間查詢:

ThinkPHP支援對某個欄位的區間查詢,例如:

$map[‘id’] = array(array(‘gt’,1),array(‘lt’,10));

查詢條件:

(‘id’ >1) AND(‘id’<10)

$map[‘id’] = array(array(‘gt’,3),array(‘lt’,10),’or’);

查詢條件:(‘id’>3)OR(‘id’<10)

$map[‘id’] = array( array(‘neq’,6),array(‘gt’,3),’and’);

查詢條件:(‘id’ !=6)AND(‘id’>3)

區間查詢的條件可以支援普通查詢的所有運算式,也就是說類似LIKE、GT和EXP這樣的運算式都可以支援。

另外區間查詢還可以支援更多的條件,只要是針對一個欄位的條件都可以寫到一起,例如:

$map[‘name’] = array(array(‘like’,’%a%’),array(‘like’,’%b%’),array(%c%),’ThinkPHP’,’or’);

查詢條件:

(‘name’ LIKE ‘%a%’)OR(‘name’ like ‘%b%’) OR (‘name’ like ‘%c%’) or(‘ThinkPHP’)

六、組合查詢:

七、統計查詢:

八、SQL查詢:

九、動態查詢:

十、子查詢:

十一、總結:

ThinkPHP3快速入門教程三:查詢語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.