构造子查询有三种方法
1.使用select方法
当select方法的参数为false的时候,表示不进行查询只是返回构建的SQL语句.例如:$subQuery = Db::table('think_user')
->field('id,name')
->where('id','>',10)
->select(false);
生成的subQuery结果为:SELECT `id`,`name` FROM `think_user` WHERE `id` > 10
2.使用fetchSql方法
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
3.使用buildSql构造子查询$subQuery = Db::table('think_user')
->field('id,name')
->where('id','>',10)
->buildSql();
生成的subQuery结果为:( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 )
需要注意的是:前面两种在构造子查询的时候需要自己添加括号
然后使用子查询构造新的查询Db::table($subQuery.' a')
->where('a.name','like','thinkphp')
->order('id','desc')
->select();
最后执行的语句为SELECT * FROM ( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 ) a WHERE a.name LIKE 'thinkphp' ORDER BY `id` desc