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 相关文章推荐
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
php smarty模版引擎中的缓存应用
Dec 11 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
php强制运行广告的方法
Dec 01 PHP
php支付宝接口用法分析
Jan 04 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
php实现的错误处理封装类实例
Jun 20 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中注册器模式类用法实例分析
2015/11/03 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
php源码的使用方法讲解
2019/09/26 PHP
详细讲解JS节点知识
2010/01/31 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中itertools模块用法详解
2014/09/25 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
python3编码问题汇总
2016/09/06 Python
python求最大连续子数组的和
2018/07/07 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
苹果音乐订阅:Apple Music
2018/08/02 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
应届生新闻编辑求职信
2013/11/19 职场文书
学校师德承诺书
2014/05/23 职场文书
校运动会广播稿300字
2014/10/07 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS
pt-archiver 主键自增
2022/04/26 MySQL