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 相关文章推荐
DISCUZ 分页代码
Jan 02 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
phpMyAdmin 安装及问题总结
May 28 PHP
php MsSql server时遇到的中文编码问题
Jun 11 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
Jan 17 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
php输入数据统一类实例
Feb 23 PHP
php搜索文件程序分享
Oct 30 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
Sep 11 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 array_push 数组函数
2009/12/26 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
php多线程并发实现方法
2016/09/30 PHP
php中__toString()方法用法示例
2016/12/07 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
python paramiko模块学习分享
2017/08/23 Python
Python实现一个简单的验证码程序
2017/11/03 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
优秀员工推荐信
2014/05/10 职场文书
小区文明倡议书
2014/05/16 职场文书
销售人员求职信
2014/07/22 职场文书
工作会议简报
2015/07/20 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
Java基础——Map集合
2022/04/01 Java/Android