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 相关文章推荐
Zend引擎的发展 [15]
Oct 09 PHP
4.与数据库的连接
Oct 09 PHP
图书管理程序(三)
Oct 09 PHP
PHP多线程抓取网页实现代码
Jul 22 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
PHP json_decode函数详细解析
Feb 17 PHP
PHP+FastCGI+Nginx配置PHP运行环境
Aug 07 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
PHP使用函数用法详解
Sep 30 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Python hashlib模块实例使用详解
2019/12/24 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
几道PHP面试题
2013/04/14 面试题
大学本科毕业生的自我鉴定
2013/11/26 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
承诺书范文
2014/06/03 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
学期个人自我总结
2015/02/13 职场文书
2015感人爱情寄语
2015/02/26 职场文书
行政处罚听证告知书
2015/07/01 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python