thinkPHP简单实现多个子查询语句的方法


Posted in PHP onDecember 05, 2016

本文实例讲述了thinkPHP简单实现多个子查询语句的方法。分享给大家供大家参考,具体如下:

sql语句博大精深

理解好sql语句,就能用好thinkphp等框架中的数据库操作

原sql:

SELECT a.*,b.* from (SELECT a.id as opener_id,a.name,sum(c.money) as bonus_money,c.year,c.month from sh_opener a
LEFT JOIN sh_opener_bonus b on a.id = b.opener_id
LEFT JOIN sh_incentive c on b.incentive_id = c.id
where a.agent_id = 3 and a.status = 1 and c.year = 2015 and c.month = 11
GROUP BY a.id,c.year,c.month) a
LEFT JOIN (SELECT a.id as payment_id,a.opener_id,a.money as payment_money,a.trode_number from sh_opener_bonus_payment a
where a.year = 2015 and a.`month` = 11 and a.agent_id = 3) b
on a.opener_id = b.opener_id;

这里面有两个子查询语句,其实子查询语句也是表,只不过是存在内存中罢了。

thinkphp实现:

$useYear = date('Y',strtotime('last month'));
$this->assign('useYear',$useYear);
$useMonth = date('m',strtotime('last month'));
$this->assign('useMonth',$useMonth);
// 获取上一月人员的奖金金额
// 子查询1
$whereSub1['a.agent_id'] = $this->agent_id;
$whereSub1['a.status'] = 1;
$whereSub1['c.year'] = $useYear;
$whereSub1['c.month'] = $useMonth;
$subQuery1 = M()->table('sh_opener a')->join('sh_opener_bonus b on a.id = b.opener_id')->join('sh_incentive c on b.incentive_id = c.id')->where($whereSub1)->group('a.id,c.year,c.month')->field('a.id,a.name,sum(c.money) as bonus_money,c.year,c.month')->select(false);
// 子查询2
$whereSub2['a.agent_id'] = $this->agent_id;
$whereSub2['a.year'] = $useYear;
$whereSub2['a.month'] = $useMonth;
$subQuery2 = M()->table('sh_opener_bonus_payment a')->where($whereSub2)->field('a.id as payment_id,a.opener_id,a.money as payment_money,a.trode_number')->select(false);
$list = M()->table($subQuery1.' a')->join($subQuery2.' b on a.id = b.opener_id')->select();
$this->assign('list',$list);

其实thinkphp框架对sql的封装,最终还是要拼凑成sql语句。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
PHP stream_context_create()作用和用法分析
Mar 29 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
浅析get与post的一些特殊情况
Jul 28 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
PHP之预定义接口详解
Jul 29 PHP
详解PHP中的状态模式编程
Aug 11 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
PHP大文件及断点续传下载实现代码
Aug 18 PHP
thinkPHP自动验证机制详解
Dec 05 #PHP
thinkPHP中_initialize方法实例分析
Dec 05 #PHP
php版微信自定义回复功能示例
Dec 05 #PHP
thinkPHP中配置的读取与C方法详解
Dec 05 #PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 #PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 #PHP
thinkPHP中验证码的简单实现方法
Dec 05 #PHP
You might like
smarty的保留变量问题
2008/10/23 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
PHP7 其他修改
2021/03/09 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
简单三步,搞掂内存泄漏
2007/03/10 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
python traceback捕获并打印异常的方法
2018/08/31 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
django如何实现视图重定向
2019/07/24 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
室内设计专业个人的自我评价
2013/12/18 职场文书
公司经理聘任书
2014/03/29 职场文书
团日活动总结书
2014/05/08 职场文书
教师个人自我评价
2015/03/04 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
Vue监视数据的原理详解
2022/02/24 Vue.js