您现在的位置是:首页> 网站开发> ThinkPHP

ThinkPHP5构造子查询的方法

  • 3200人已阅读
  • 时间:2018-10-16 08:59:58
  • 分类:ThinkPHP
  • 作者:祥哥

构造子查询有三种方法

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


Top