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 相关文章推荐
PHP4中实现动态代理
Oct 09 PHP
DISCUZ 分页代码
Jan 02 PHP
如何使用php判断所处服务器操作系统的类型
Jun 20 PHP
PHP函数之日期时间函数date()使用详解
Sep 09 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
Yii操作数据库实现动态获取表名的方法
Mar 29 PHP
php 如何获取文件的后缀名
Jun 05 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
thinkPHP框架中执行事务的方法示例
May 31 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 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
一个SQL管理员的web接口
2006/10/09 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
解析php常用image图像函数集
2013/06/24 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
2017/07/18 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
金融专业大学生自我评价
2014/01/09 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
律师催款函范文
2015/06/24 职场文书
会议营销主持词
2015/07/03 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python