ThinkPHP5.1 子查询-使用 Group 获取每组最新数据
背景
当前项目业务中,
需要以字段account_id
分组,获取"redbook_effect"
数据表中最新的数据记录集合
- 根据网上的经验描述,如果 group 和 order 一起使用- 会先进行分组获取,- 再对得到的结果集进行排序- 所以如此一来,得到的最终数据中,对应字段 "account_id" 的记录并非是最新的---- 解决方案:【使用子查询,先进行排序,再分组】
- 参考文档
【ThinkPHP5 开发文档 —— 子查询】
【where,group by,having,order by 执行顺序和编写顺序】
- 处理源码如下:
$where = [['note_content_tag', '<>', '']];//调用 buildSql 方法后不会进行实际的查询操作,而只是生成该次查询的 SQL 语句$subQuery = Db::name(`redbook_effect`)->field('id,account_id,note_content_tag')->order('id desc')->where($where)->buildSql();//然后使用子查询构造新的查询$list = Db::table($subQuery.' a')->field('account_id,note_content_tag')->group('account_id')->select();
- 如上操作,生成的 sql 完整语句:
SELECT `account_id`,`note_content_tag`
FROM ( SELECT `id`,`account_id`,`note_content_tag` FROM `mz_redbook_effect` WHERE `note_content_tag` <> '' ORDER BY `id` DESC ) a
GROUP BY `account_id`;
▷ 附录
①. 报错:"Every derived table must have its own alias"
- 以上处理,注意
Db::table($subQuery.' a')
中需使用别名,
可视为一张派生表a
,否则会报错:
"Every derived table must have its own alias"
总结: 因为在嵌套查询中,子查询的结果是作为一个派生表给上一级进行查询,所以子查询的结果必须有一个别名
②. 大批量数据处理
- 对于大数据量的查询操作,
建议 可以使用新版提供的游标查询功能 【>>> 大批量数据处理】
( 该查询方式利用了PHP的生成器特性,可以大幅减少大量数据查询的内存占用问题 )
ThinkPHP5.1 子查询-使用 Group 获取每组最新数据相关推荐
- 【MYSQL】分组之后获取每组最新的数据
记录一次有点麻烦的sql 可以直接复制拿去测试,一开始我也百度来着,发现要么没法满足我的需求,要么就连看下去的欲望都没有 建表测试demo: CREATE TABLE `p_test` (`id` v ...
- oracle 两列拼接 查询_oracle 将获取到的两行数据,拼接为两列
如果光看题目的话,肯定会感觉很简单,但是运用到实际中就很麻烦了. 需求:主表对应子表 一对多,现在对应主表一条记录,可能对应子表多条记录,将这些记录汇总到一行中,考虑到主表记录可能比较多,只需要,回去 ...
- sql 子查询 嵌套查询_SQL子查询– SQL中的嵌套查询
sql 子查询 嵌套查询 In the real world, there are times when we need a particular set of data but we don't h ...
- 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)
子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...
- MySQL 表关系及多表操作(联合查询、连接查询、子查询)
文章目录 表关系 一对一关系 一对多关系 多对多关系 总结 MySQL多表操作 联合查询 联合查询排序 连接查询 交叉连接 内连接 外连接 自然连接 using关键字 子查询 表关系 表关系:一个表代 ...
- MySQL 学习笔记(16)— 子查询(单行单列、一行多列、多行多列、 ALL、ANY、SOME 运算符、EXISTS 操作符)
1. 子查询概念 子查询是指嵌套在其他语句(SELECT . INSERT . UPDATE . DELETE 等)中的 SELECT 语句:子查询也称为内查询( inner query )或者嵌套查 ...
- t - sql的阶梯:超越基础水平2:写子查询
t - sql的阶梯:超越基础水平2:写子查询 原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/104517/ 通过格雷戈里 ...
- Oracle 的关联子查询(correlated subquery) 简介.
相信 接触过 ocp考题既, 都会见到 correlated subquery的字眼. correlated subquery的中文名称就是相关子查询呢? 1. 什么是子查询 这个很简单, 子查询就 ...
- 【一周入门MySQL—3】多表查询、子查询、常用函数
多表查询.子查询.常用函数 一.多表查询 多表查询:通过不同表中具有相同意义的关键字段,将多个表进行连接,查询不同表中的字段信息. 对应关系 一对一:比如下图的人员信息表和人员身份证对应表,一个员工只 ...
- 1.子查询知识体系,单行子查询,多行子查询
1查询工资比scott高的员工信息 A 第一步:查询出scott这个员工的工资 select sal from emp where ename = 'SCOTT'; B 第二步:查询出工资比sc ...
最新文章
- Cannot resolve method 'getParameter( )'
- oracle update from多表性能优化一例
- android 第三方登录 --- QQ
- zabbix启动无效,无法监听10051
- java 1.7的新特性_[Java] JDK 1.7版本的 新特性
- MySQL数据库的数据类型以及取值范围详解
- Git 使用篇二:搭建远程服务器
- Windows Driver开发_TraceEvents调试以及加载驱动的方法
- hdu 2795 Billboard
- android声音播放mp3文件,如何在android中播放音频文件
- Android基于高德地图poi的仿微信获取位置
- python数据科学包第三天(股票数据分析、时间事件日志)
- c语言结构体的流程图怎么画,结构流程图不会画?手把手教你学会!
- Promise的三种状态
- android 自定义字体 ttf,Android利用TTF文件设置字体
- 网络、如何通信、TCP/IP协议
- 100款最佳英文字体...
- 站在时代的风口:人工智能时代的思维方式
- 开源案例:Spring Boot + Vue 的音乐网站
- 2011国信蓝点杯全国软件设计大赛