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与XML的PDF文档生成技术
Oct 09 PHP
php&java(二)
Oct 09 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
探讨如何把session存入数据库
Jun 07 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
PHP类的封装与继承详解
Sep 29 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
Mar 21 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 01 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中神奇的fastcgi_finish_request
2011/05/02 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php curl模拟post请求小实例
2013/11/13 PHP
限制文本框输入N个字符的js代码
2010/05/13 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
Python实现图像的垂直投影示例
2020/01/17 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
指针和引用有什么区别
2013/01/13 面试题
大学生最常用的自我评价
2013/12/07 职场文书
音乐教学案例
2014/01/30 职场文书
公司管理建议书范文
2014/03/12 职场文书
入党自我鉴定
2014/03/25 职场文书
机房搬迁方案
2014/05/01 职场文书
会计学专业求职信
2014/07/17 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
博物馆观后感
2015/06/05 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书