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 相关文章推荐
ADODB结合SMARTY使用~超级强
Nov 25 PHP
java EJB 加密与解密原理的一个例子
Jan 11 PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 PHP
php基于websocket搭建简易聊天室实践
Oct 24 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP安全防范技巧分享
2011/11/03 PHP
PHP json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
python实现简单中文词频统计示例
2017/11/08 Python
高效使用Python字典的清单
2018/04/04 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
资深生产主管自我评价
2013/09/22 职场文书
医院工作检讨书范文
2014/02/10 职场文书
士力架广告词
2014/03/20 职场文书
社会发展项目建议书
2014/08/25 职场文书
庆七一活动总结
2014/08/27 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
师德师风学习材料
2014/12/19 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
Django使用echarts进行可视化展示的实践
2021/06/10 Python
如何基于python实现单目三维重建详解
2022/06/25 Python