首先構造子查詢sql,可以使用下面三種的方式來構建子查詢。
fetchsql方法表示不進行查詢而只是返回構建的sql語句,並且不僅僅支援select
,而是支援所有的curd查詢。
$subquery = db::table('think_user')
->field('id,name')
->where('id', '>', 10)
->fetchsql(true)
->select();
生成的subquery結果為:
select `id`,`name` from `think_user` where `id` > 10
$subquery = db::table('think_user')
->field('id,name')
->where('id', '>', 10)
->buildsql();
生成的subquery結果為:
( select `id`,`name` from `think_user` where `id` > 10 )
呼叫buildsql方法後不會進行實際的查詢操作,而只是生成該次查詢的sql語句(為了避免混淆,會在sql兩邊加上括號),然後我們直接在後續的查詢中直接呼叫。
呼叫buildsql方法後不會進行實際的查詢操作,而只是生成該次查詢的sql語句(為了避免混淆,會在sql兩邊加上括號),然後我們直接在後續的查詢中直接呼叫。
然後使用子查詢構造新的查詢:
db::table($subquery . ' a')
->where('a.name', 'like', 'thinkphp')
->order('id', 'desc')
->select();
生成的sql語句為:
select * from (
select `id`,`name` from `think_user` where `id` > 10 ) a
where
a.name like 'thinkphp'
order by
`id`
desc
in/not in
和exists/not exists
之類的查詢可以直接使用閉包作為子查詢,例如:
db::table('think_user')
->where('id', 'in', function ($query) )
->select();
生成的sql語句是
select * from `think_user` where `id` in ( select `id` from `think_profile` where `status` = 1 )
db::table('think_user')
->whereexists(function ($query) )->find();
生成的sql語句為
select * from `think_user` where exists ( select * from `think_profile` where `status` = 1 )
TP5 1 資料庫查詢彙總
where 欄位名 查詢值 等於 where 欄位名 in 查詢陣列 where 欄位名 like 匹配字串 where 欄位名 is null where 欄位名 between 1,3 need db name 表名 model 表名 field 欄位名1,欄位名2,distinct 去重查詢欄...
tp5 1 資料庫原生sql語句查詢
db類支援原生sql查詢操作,主要包括下面兩個方法 query方法用於執行sql查詢操作,如果資料非法或者查詢錯誤則返回false,否則返回查詢結果資料集 同select方法 使用示例 db query select from think user where status 1 如果你當前採用了分布...
tp5 1 隨機查詢資料
說到隨機查詢資料,如果用sql的話 直接用order by rand 就是說隨機排序,我們取多少條都可以 例 select from table where 1 order by rand limit 10那tp5.1中如何實現呢?thinkphp5從v5.0.17之後,如果排序使用到sql函式,要...