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出错界面
Oct 09 PHP
PHP4之COOKIE支持详解
Oct 09 PHP
深入array multisort排序原理的详解
Jun 18 PHP
php调用c接口无错版介绍
Mar 11 PHP
php下Memcached入门实例解析
Jan 05 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
Sep 30 PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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
function.inc.php超越php
2006/12/09 PHP
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
php解决安全问题的方法实例
2019/09/19 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
python异步任务队列示例
2014/04/01 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
python输入多行字符串的方法总结
2019/07/02 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
经济管理专业毕业生推荐信
2013/11/11 职场文书
财务主管的岗位职责
2013/12/30 职场文书
公司管理建议书范文
2014/03/12 职场文书
献爱心标语
2014/06/21 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
国王的演讲观后感
2015/06/03 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
入团申请书格式
2019/06/20 职场文书
nginx优化的六点方法
2021/03/31 Servers
Redis如何一键部署脚本
2021/04/12 Redis