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实现无限级分类 | 树型显示分类关系
Nov 19 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
基于php验证码函数的使用示例
May 03 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
Oct 22 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
php英文单词统计器
Jun 23 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 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 之入门篇
2006/12/04 PHP
php设计模式小结
2013/02/15 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
python小技巧之批量抓取美女图片
2014/06/06 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
Django Celery异步任务队列的实现
2019/07/24 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
python实现电子词典
2020/03/03 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
诚信贷款承诺书
2014/05/30 职场文书
教育合作协议范本
2014/10/17 职场文书
幼儿教师个人总结
2015/02/05 职场文书
党员个人总结自评
2015/02/14 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
求职信如何撰写?
2019/05/22 职场文书
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android