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之变量、常量学习笔记
Mar 27 PHP
坏狼的PHP学习教程之第1天
Jun 15 PHP
destoon各类调用汇总
Jun 20 PHP
PHP常用正则表达式集锦
Aug 17 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP defined()函数的使用图文详解
Jul 20 PHP
实现laravel 插入操作日志到数据库的方法
Oct 11 PHP
Thinkphp 框架扩展之类库扩展操作详解
Apr 23 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
php结合表单实现一些简单功能的例子
2011/06/04 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python中cPickle用法例子分享
2014/01/03 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python re模块findall()函数实例解析
2018/01/19 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
Python3实现飞机大战游戏
2020/04/24 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
python中如何使用虚拟环境
2020/10/14 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
利用python绘制正态分布曲线
2021/01/04 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
电力安全事故反思
2014/04/27 职场文书
设计师求职信模板
2014/05/06 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
庆元旦主持词
2015/07/06 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python