咔叽网单游戏基地

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12|回复: 0

[PHP编程] tp5.1框架数据库子查询操作实例分析

[复制链接]
  • TA的每日心情
    无聊
    2019-6-2 14:11
  • 签到天数: 4 天

    [LV.2]圆转纯熟

    1万

    主题

    1万

    帖子

    7万

    积分

    帖子管理员

    Rank: 9Rank: 9Rank: 9

    积分
    70408
    发表于 2020-7-6 21:48:40 | 显示全部楼层 |阅读模式
    本文实例讲述了tp5.1框架数据库子查询操作。分享给大家供大家参考,具体如下:
    首先构造子查询SQL,可以使用下面三种的方式来构建子查询。
    使用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 使用buildSql构造子查询


    $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两边加上括号),然后我们直接在后续的查询中直接调用。
    然后使用子查询构造新的查询:

    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) {
      $query->table('think_profile')->where('status', 1)->field('id');
    })
    ->select();

    生成的SQL语句是

    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语句为

    SELECT * FROM `think_user`
    WHERE EXISTS ( SELECT * FROM `think_profile` WHERE `status` = 1 ) 更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    原文地址:https://www.jb51.net/article/187343.htm
    回复

    使用道具 举报

    QQ|手机版|小黑屋|咔叽网单

    GMT+8, 2020-8-14 00:50

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表