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 file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
php安全配置 如何配置使其更安全
Dec 16 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
PHP打印输出函数汇总
Aug 28 PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 PHP
PHP echo()函数讲解
Feb 15 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
Laravel 5.5 异常处理 & 错误日志的解决
Oct 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学习 运算符与运算符优先级
2008/06/15 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
深入分析php之面向对象
2013/05/15 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
Javascript倒计时代码
2010/08/12 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
2016/04/13 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
基于JSON数据格式详解
2017/08/31 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
Python无损音乐搜索引擎实现代码
2018/02/02 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
应届生.NET方向面试题
2015/05/23 面试题
机械专业个人求职自荐信格式
2013/09/21 职场文书
办护照工作证明范本
2014/01/14 职场文书
外贸业务员求职信
2014/06/16 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
简易版租房协议书范本
2014/10/13 职场文书