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 相关文章推荐
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
判断PHP数组是否为空的代码
Sep 08 PHP
php引用地址改变变量值的问题
Mar 23 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
php图片添加文字水印实现代码
Mar 15 PHP
CI框架入门之MVC简单示例
Nov 21 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
Oct 02 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项目开发中最常用的自定义函数整理
2010/12/02 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
js获取form的方法
2015/05/06 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
Python的ORM框架中SQLAlchemy库的查询操作的教程
2015/04/25 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
英文留学推荐信范文
2014/01/25 职场文书
技术合作协议书范本
2014/04/18 职场文书
成立公司计划书
2014/05/07 职场文书
销售团队激励口号
2014/06/06 职场文书
525心理活动总结
2014/07/04 职场文书
最美家庭活动方案
2014/08/31 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
看上去很美观后感
2015/06/10 职场文书
企业财务管理制度范本
2015/08/04 职场文书
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers