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 相关文章推荐
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
对PHP PDO的一些认识小结
Jan 23 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
Yii清理缓存的方法
Jan 06 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
php实现的xml操作类
Jan 15 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 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中抽象类和接口的概念以及区别
2013/06/27 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
xtree.js 代码
2007/03/13 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
遍历python字典几种方法总结(推荐)
2016/09/11 Python
使用python实现对元素的长截图功能
2019/11/14 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
致跳高运动员加油稿
2014/02/12 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
行政主管岗位职责
2015/02/03 职场文书
工作时间调整通知
2015/04/24 职场文书
广播体操比赛主持词
2015/06/29 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
MySQL 开窗函数
2022/02/15 MySQL