tp5.1 框架查詢表示式用法詳解
本文例項講述了tp5.1 框架查詢表示式用法。分享給大家供大家參考,具體如下:
查詢表示式
查詢表示式支援大部分的SQL查詢語法,也是ThinkPHP
查詢語言的精髓,查詢表示式的使用格式:
where('欄位名','表示式','查詢條件'); whereOr('欄位名','查詢條件');
5.1
還支援新的查詢方法
whereField('表示式','查詢條件'); whereOrField('表示式','查詢條件');
Field
使用欄位的駝峰命名方式。
表示式不分大小寫,支援的查詢表示式有下面幾種:
表示式 | 含義 | 快捷查詢方法 |
---|---|---|
= | 等於 | |
<> | 不等於 | |
> | 大於 | |
>= | 大於等於 | |
< | 小於 | |
<= | 小於等於 | |
[NOT] LIKE | 模糊查詢 | whereLike/whereNotLike |
[NOT] BETWEEN | (不在)區間查詢 | whereBetween/whereNotBetween |
[NOT] IN | (不在)IN 查詢 | whereIn/whereNotIn |
[NOT] NULL | 查詢欄位是否(不)是NULL | whereNull/whereNotNull |
[NOT] EXISTS | EXISTS查詢 | whereExists/whereNotExists |
[NOT] REGEXP | 正則(不)匹配查詢(僅支援Mysql) | |
[NOT] BETWEEM TIME | 時間區間比較 | whereBetweenTime |
> TIME | 大於某個時間 | whereTime |
< TIME | 小於某個時間 | whereTime |
>= TIME | 大於等於某個時間 | whereTime |
<= TIME | 小於等於某個時間 | whereTime |
EXP | 表示式查詢,支援SQL語法 | whereExp |
表示式查詢的用法示例如下:
等於(=)
例如:
Db::name('user')->where('id','=',100)->select();
和下面的查詢等效
Db::name('user')->where('id',100)->select();
最終生成的SQL語句是:
SELECT * FROM `think_user` WHERE `id` = 100
不等於(<>)
例如:
Db::name('user')->where('id','<>',100)->select();
最終生成的SQL語句是:
SELECT * FROM `think_user` WHERE `id` <> 100
大於(>)
例如:
Db::name('user')->where('id','>',100)->select();
最終生成的SQL語句是:
SELECT * FROM `think_user` WHERE `id` > 100
大於等於(>=)
例如:
Db::name('user')->where('id','>=',100)->select();
最終生成的SQL語句是:
SELECT * FROM `think_user` WHERE `id` >= 100
小於(<)
例如:
Db::name('user')->where('id','<',100)->select();
最終生成的SQL語句是:
SELECT * FROM `think_user` WHERE `id` < 100
小於等於(<=)
例如:
Db::name('user')->where('id','<=',100)->select();
最終生成的SQL語句是:
SELECT * FROM `think_user` WHERE `id` <= 100
[NOT] LIKE: 同sql的LIKE
例如:
Db::name('user')->where('name','like','thinkphp%')->select();
最終生成的SQL語句是:
SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%'
like
查詢支援使用陣列
Db::name('user')->where('name',['%think','php%'],'OR')->select();
實際生成的SQL語句為:
SELECT * FROM `think_user` WHERE (`name` LIKE '%think' OR `name` LIKE 'php%')
為了更加方便,應該直接使用whereLike
方法
Db::name('user')->whereLike('name','thinkphp%')->select(); Db::name('user')->whereNotLike('name','thinkphp%')->select();
[NOT] BETWEEN :同sql的[not] between
查詢條件支援字串或者陣列,例如:
Db::name('user')->where('id','between','1,8')->select();
和下面的等效:
Db::name('user')->where('id',[1,8])->select();
最終生成的SQL語句都是:
SELECT * FROM `think_user` WHERE `id` BETWEEN 1 AND 8
最快捷的查詢方法是:
Db::name('user')->whereBetween('id',8')->select(); Db::name('user')->whereNotBetween('id',8')->select();
[NOT] IN: 同sql的[not] in
查詢條件支援字串或者陣列,例如:
Db::name('user')->where('id','in',5,8])->select();
最終的SQL語句為:
SELECT * FROM `think_user` WHERE `id` IN (1,8)
最快捷的查詢方法是:
Db::name('user')->whereIn('id',8')->select(); Db::name('user')->whereNotIn('id',8')->select();
[NOT] IN
查詢支援使用閉包方式
[NOT] NULL :
查詢欄位是否(不)是Null
,例如:
Db::name('user')->where('name',null) ->where('email','null') ->where('name','not null') ->select();
實際生成的SQL語句為:
SELECT * FROM `think_user` WHERE `name` IS NULL AND `email` IS NULL AND `name` IS NOT NULL
如果你需要查詢一個欄位的值為字串null
或者not null
,應該使用:
Db::name('user')->where('title','not null') ->select();
推薦的方式是使用whereNull
和whereNotNull
方法查詢。
Db::name('user')->whereNull('name') ->whereNull('email') ->whereNotNull('name') ->select();
EXP:表示式
支援更復雜的查詢情況 例如:
Db::name('user')->where('id',3,8')->select();
可以改成:
Db::name('user')->where('id','exp',' IN (1,8) ')->select();
exp
查詢的條件不會被當成字串,所以後面的查詢條件可以使用任何SQL支援的語法,包括使用函式和欄位名稱。
動態查詢
對於上面的查詢表示式,可以使用動態查詢方法進行簡化,例如:
Db::name('user')->where('id',100)->select();
可以簡化為:
Db::name('user')->whereId('>=',100)->select();
更多關於thinkPHP相關內容感興趣的讀者可檢視本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術總結》。
希望本文所述對大家基於ThinkPHP框架的PHP程式設計有所幫助。