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 强制下载文件代码
Oct 24 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
php常量详细解析
Oct 27 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
php实现数组重复数字统计实例
Sep 30 PHP
PHP单元测试框架PHPUnit用法详解
Jan 23 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 PHP
如何解决php-fpm启动不了问题
Nov 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获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
JS跨域代码片段
2012/08/30 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
python学习 流程控制语句详解
2016/06/01 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
儿童学习python的一些小技巧
2018/05/27 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
python浪漫表白源码
2019/04/05 Python
python字符串格式化方式解析
2019/10/19 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
C#基础面试题
2016/10/17 面试题
国旗下的讲话演讲稿
2014/05/08 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
详解Redis主从复制实践
2021/05/19 Redis