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 相关文章推荐
十天学会php(3)
Oct 09 PHP
一个程序下载的管理程序(一)
Oct 09 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
Jun 12 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
10条php编程小技巧
Jul 07 PHP
详解PHP中的Traits
Jul 29 PHP
PHP常用的小程序代码段
Nov 14 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
详解PHP处理密码的几种方式
Nov 30 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
Laravel框架处理用户的请求操作详解
Dec 20 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
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
javascript window对象属性整理
2009/10/24 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
python zip文件 压缩
2008/12/24 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
带你认识Django
2019/01/15 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
CSS3简单实现照片墙
2014/12/12 HTML / CSS
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
大专自我鉴定范文
2013/10/23 职场文书
给分销商的致歉信
2014/01/14 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
应聘会计求职信
2014/06/11 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫
优化Mysql查询的示例
2022/04/26 MySQL