• 背景

    当前项目业务中,
    需要以字段 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 获取每组最新数据相关推荐

  1. 【MYSQL】分组之后获取每组最新的数据

    记录一次有点麻烦的sql 可以直接复制拿去测试,一开始我也百度来着,发现要么没法满足我的需求,要么就连看下去的欲望都没有 建表测试demo: CREATE TABLE `p_test` (`id` v ...

  2. oracle 两列拼接 查询_oracle 将获取到的两行数据,拼接为两列

    如果光看题目的话,肯定会感觉很简单,但是运用到实际中就很麻烦了. 需求:主表对应子表 一对多,现在对应主表一条记录,可能对应子表多条记录,将这些记录汇总到一行中,考虑到主表记录可能比较多,只需要,回去 ...

  3. sql 子查询 嵌套查询_SQL子查询– SQL中的嵌套查询

    sql 子查询 嵌套查询 In the real world, there are times when we need a particular set of data but we don't h ...

  4. 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)

    子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...

  5. MySQL 表关系及多表操作(联合查询、连接查询、子查询)

    文章目录 表关系 一对一关系 一对多关系 多对多关系 总结 MySQL多表操作 联合查询 联合查询排序 连接查询 交叉连接 内连接 外连接 自然连接 using关键字 子查询 表关系 表关系:一个表代 ...

  6. MySQL 学习笔记(16)— 子查询(单行单列、一行多列、多行多列、 ALL、ANY、SOME 运算符、EXISTS 操作符)

    1. 子查询概念 子查询是指嵌套在其他语句(SELECT . INSERT . UPDATE . DELETE 等)中的 SELECT 语句:子查询也称为内查询( inner query )或者嵌套查 ...

  7. t - sql的阶梯:超越基础水平2:写子查询

    t - sql的阶梯:超越基础水平2:写子查询 原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/104517/ 通过格雷戈里 ...

  8. Oracle 的关联子查询(correlated subquery) 简介.

    相信 接触过 ocp考题既, 都会见到 correlated subquery的字眼. correlated subquery的中文名称就是相关子查询呢? 1. 什么是子查询 这个很简单,  子查询就 ...

  9. 【一周入门MySQL—3】多表查询、子查询、常用函数

    多表查询.子查询.常用函数 一.多表查询 多表查询:通过不同表中具有相同意义的关键字段,将多个表进行连接,查询不同表中的字段信息. 对应关系 一对一:比如下图的人员信息表和人员身份证对应表,一个员工只 ...

  10. 1.子查询知识体系,单行子查询,多行子查询

     1查询工资比scott高的员工信息 A 第一步:查询出scott这个员工的工资 select sal from emp where ename = 'SCOTT'; B 第二步:查询出工资比sc ...

最新文章

  1. Cannot resolve method 'getParameter( )'
  2. oracle update from多表性能优化一例
  3. android 第三方登录 --- QQ
  4. zabbix启动无效,无法监听10051
  5. java 1.7的新特性_[Java]  JDK 1.7版本的 新特性
  6. MySQL数据库的数据类型以及取值范围详解
  7. Git 使用篇二:搭建远程服务器
  8. Windows Driver开发_TraceEvents调试以及加载驱动的方法
  9. hdu 2795 Billboard
  10. android声音播放mp3文件,如何在android中播放音频文件
  11. Android基于高德地图poi的仿微信获取位置
  12. python数据科学包第三天(股票数据分析、时间事件日志)
  13. c语言结构体的流程图怎么画,结构流程图不会画?手把手教你学会!
  14. Promise的三种状态
  15. android 自定义字体 ttf,Android利用TTF文件设置字体
  16. 网络、如何通信、TCP/IP协议
  17. 100款最佳英文字体...
  18. 站在时代的风口:人工智能时代的思维方式
  19. 开源案例:Spring Boot + Vue 的音乐网站
  20. 2011国信蓝点杯全国软件设计大赛

热门文章

  1. 让ffmpeg支持输出h264格式
  2. 如何批量将mp3压缩变小?
  3. 腾达无线加密与Win7
  4. 怎么使用et代理换ip软件切换电脑手机的上网ip_使用教程
  5. wap jsp 开发
  6. 卓有成效的管理者(笔记)——我能贡献什么
  7. 监测-病毒篇(病毒的了解和认识)
  8. 自在服务器虚拟化,新破晓诛仙3单机版16职业商业仿官青罗天界灵境神隐虚拟机一键端GM网单...
  9. 手机端自动播放网页背景音乐代码
  10. IE故障修复之点击无反应