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 09 PHP
PHP生成静态页面详解
Nov 19 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
php利用新浪接口查询ip获取地理位置示例
Jan 20 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
php实现统计网站在线人数的方法
May 12 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
php桥接模式应用案例分析
Oct 23 PHP
PHP7 字符串处理机制修改
Mar 09 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获取MSN好友列表类的实现代码
2013/06/23 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Flask之请求钩子的实现
2018/12/23 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
python如何进行矩阵运算
2020/06/05 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
个人担保书范文
2014/05/20 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
2014年教师工作总结
2014/11/10 职场文书
2014年司机工作总结
2014/11/21 职场文书
培训班开班主持词
2015/07/02 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
Oracle创建只读账号的详细步骤
2021/06/07 Oracle