目錄
- 使用fetchSql方法
- 使用buildSql構(gòu)造子查詢
- 使用閉包構(gòu)造子查詢
本文實(shí)例講述了tp5.1框架數(shù)據(jù)庫(kù)子查詢操作。分享給大家供大家參考,具體如下:
首先構(gòu)造子查詢SQL,可以使用下面三種的方式來(lái)構(gòu)建子查詢。
使用fetchSql方法
fetchSql方法表示不進(jìn)行查詢而只是返回構(gòu)建的SQL語(yǔ)句,并且不僅僅支持select
,而是支持所有的CURD查詢。
$subQuery = Db::table('think_user')
->field('id,name')
->where('id', '>', 10)
->fetchSql(true)
->select();
生成的subQuery結(jié)果為:
SELECT `id`,`name` FROM `think_user` WHERE `id` > 10
使用buildSql構(gòu)造子查詢
$subQuery = Db::table('think_user')
->field('id,name')
->where('id', '>', 10)
->buildSql();
生成的subQuery結(jié)果為:
( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 )
調(diào)用buildSql方法后不會(huì)進(jìn)行實(shí)際的查詢操作,而只是生成該次查詢的SQL語(yǔ)句(為了避免混淆,會(huì)在SQL兩邊加上括號(hào)),然后我們直接在后續(xù)的查詢中直接調(diào)用。
然后使用子查詢構(gòu)造新的查詢:
Db::table($subQuery . ' a')
->where('a.name', 'like', 'thinkphp')
->order('id', 'desc')
->select();
生成的SQL語(yǔ)句為:
SELECT * FROM (
SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 ) a
WHERE
a.name LIKE 'thinkphp'
ORDER BY
`id`
desc
使用閉包構(gòu)造子查詢
IN/NOT IN
和EXISTS/NOT EXISTS
之類的查詢可以直接使用閉包作為子查詢,例如:
Db::table('think_user')
->where('id', 'IN', function ($query) {
$query->table('think_profile')->where('status', 1)->field('id');
})
->select();
生成的SQL語(yǔ)句是
SELECT * FROM `think_user`
WHERE `id` IN ( SELECT `id` FROM `think_profile` WHERE `status` = 1 )
Db::table('think_user')
->whereExists(function ($query) {
$query->table('think_profile')->where('status', 1);
})->find();
生成的SQL語(yǔ)句為
SELECT * FROM `think_user`
WHERE EXISTS ( SELECT * FROM `think_profile` WHERE `status` = 1 )
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- PHP tp5中使用原生sql查詢代碼實(shí)例
- tp5.1 框架數(shù)據(jù)庫(kù)-數(shù)據(jù)集操作實(shí)例分析
- tp5.1 框架路由操作-URL生成實(shí)例分析
- tp5.1 框架join方法用法實(shí)例分析
- tp5.1 框架數(shù)據(jù)庫(kù)常見(jiàn)操作詳解【添加、刪除、更新、查詢】
- TP5多入口設(shè)置實(shí)例講解