tp5.1框架数据库子查询操作实例分析


Posted in PHP onMay 26, 2020

本文实例讲述了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 INEXISTS/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框架的PHP程序设计有所帮助。

PHP 相关文章推荐
第一节--面向对象编程
Nov 16 PHP
MySql 按时间段查询数据方法(实例说明)
Nov 02 PHP
php学习之变量的使用
May 29 PHP
php cli 小技巧
Jun 03 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
学习php设计模式 php实现单例模式(singleton)
Dec 07 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
php基于协程实现异步的方法分析
Jul 17 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 #PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 #PHP
tp5.1 框架查询表达式用法详解
May 25 #PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 #PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 #PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 #PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 #PHP
You might like
十天学会php之第一天
2006/10/09 PHP
PHP初学者头疼问题总结
2006/10/09 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
写出高质量的PHP程序
2012/02/04 PHP
php中define用法实例
2015/07/30 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
Python中偏函数用法示例
2018/06/07 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
市场开发与营销专业求职信
2013/12/31 职场文书
餐饮加盟计划书
2014/01/10 职场文书
大学生创业策划书
2014/02/02 职场文书
小学少先队活动方案
2014/02/18 职场文书
大学信息公开实施方案
2014/03/09 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
品质标语大全
2014/06/21 职场文书
语文教育专业求职信
2014/06/28 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
公司新员工欢迎词
2015/09/30 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
Mysql中mvcc各场景理解应用
2022/08/05 MySQL