本文摘自PHP中文网,作者jacklove,侵删。
mysql的group by语法可以根据指定的规则对数据进行分组,分组就是将一个数据集划分成若干个小区域,然后再针对若干个小区域进行数据处理。本文将介绍mysql使用group by分组时,实现组内排序的方法。
相关mysql视频教程推荐:《mysql教程》
mysql的group by语法可以对数据进行分组,但是分组后的数据并不能进行组内排序。
例如一个评论表有多个用户评论,需要获取每个用户最后评论的内容。
创建测试数据表及数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
在comment表中,每个用户最后评论的内容就是id为6,4,11,10的记录。
使用group by查询
1 2 3 4 5 6 |
|
可以看到结果,分组后只会返回分组内的第一条数据。因为group by语法没有进行组内排序的功能,只会按mysql默认的排序显示。
如何才能对group by分组内的数据进行排序了,这个需要根据不同的需求处理。
1.id最大的,评论时间肯定最新
这种情况我们可以使用id代替时间去搜寻并组内排序,使用max(id)就可以获取到每个分组中最大的评论id(即最新的评论)
1 2 3 4 5 6 |
|
2.id与评论时间没有关系,id大的评论时间可能不是最新
这种情况我们就需要使用max(addtime)来获取最新的评论,但因为不同用户的评论时间有可能相同,因此还需要加多user_id这个条件去查询。
重新创建测试数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
符合条件的应该是id为2,3,5,8的记录
1 2 3 4 5 6 7 |
|
使用right join可以减少外层的数据集。
where user_id is not null 可以使group by user_id时使用索引。
本篇文章讲解了mysql group by 组内排序的方法 ,更多相关内容请关注php中文网。
相关推荐:
如何利用php 来反射API获取类信息
详解在mysql查询时,offset过大影响性能的原因与优化方法
关于php使用正则去除宽高样式的方法
以上就是讲解mysql group by 组内排序的方法的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。