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 mysql数据库操作类
Jun 04 PHP
PHP form 表单传参明细研究
Jul 17 PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
基于xcache的配置与使用详解
Jun 18 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
Yii入门教程之目录结构、入口文件及路由设置
Nov 25 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
php使用glob函数遍历文件和目录详解
Sep 23 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
Jul 18 PHP
如何在Mac上通过docker配置PHP开发环境
May 29 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 处理图片的类实现代码
2009/10/23 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
js时间控件只显示年月
2017/01/08 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
vue.js中created方法作用
2018/03/30 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
python操作oracle的完整教程分享
2018/01/30 Python
Python自定义线程池实现方法分析
2018/02/07 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
python贪吃蛇游戏代码
2020/04/18 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
python super函数使用方法详解
2020/02/14 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
汽车运用工程毕业生自荐信
2013/10/29 职场文书
外贸业务员求职信范文
2013/12/12 职场文书
计算机专业毕业生自荐信
2013/12/31 职场文书
七一党建活动方案
2014/01/28 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
pytorch 实现变分自动编码器的操作
2021/05/24 Python