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公用函数列表[正则]
Feb 22 PHP
php 文件上传系统手记
Oct 26 PHP
PHP学习笔记之二
Jan 17 PHP
php提示undefined index的几种解决方法
May 21 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
php中ob函数缓冲机制深入理解
Aug 03 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
laravel 根据不同组织加载不同视图的实现
Oct 14 PHP
php 多继承的几种常见实现方法示例
Nov 18 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基础学习之流程控制的实现分析
2013/04/28 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
laravel5.6实现数值转换
2019/10/23 PHP
图片完美缩放
2006/09/07 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
python将图片转base64,实现前端显示
2020/01/09 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
Java程序员面试题
2016/09/27 面试题
转预备党员政审材料
2014/02/06 职场文书
市场总经理岗位职责
2014/04/11 职场文书
网站文案策划岗位职责
2015/04/14 职场文书