一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

mysql数据库分组(GROUP BY)学习笔记

时间:2013-12-03 编辑:简简单单 来源:一聚教程网

每当查询数据库时,想知道有多少类,或想知道找不相同的有多少种,就用到了分组语句group by

使用方法:

 代码如下 复制代码

SELECT * FROM `表名` group by `分组字段`

或带limit做法

 代码如下 复制代码

SELECT *
FROM `数据表`
GROUP BY `分组的字段`
LIMIT 0 , 30

例:(查询dedecms(织梦)程序的栏目标题表,以栏目id分组)

 代码如下 复制代码

SELECT *
FROM `dede_archives`
GROUP BY `typeid`
LIMIT 0 , 30

关于mysql group by排序问题 .

类如 有一个 帖子的回复表,posts( id , tid , subject , message ,  dateline ) ,

id为 自动增长字段, tid为该回复的主题帖子的id(外键关联),  subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳表示,


最简单的 :

 代码如下 复制代码


SELECT * FROM (SELECT * FROM posts ORDER BY dateline DESC) GROUP BY  tid ORDER BY dateline DESC LIMIT 10

也有网友利用自连接实现的 ,这样的效率应该比上面的子查询效率高,不过,为了简单明了,就只用这样一种了,GROUP BY没有排序功能,可能是mysql弱智的地方,也许是我还没有发现,


where+group by(对小组进行排序)



对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但group_concat的作用是将小组里的字段里的值进行串联起来。

 代码如下 复制代码

select group_concat(id order by `date` desc) from `test` group by category_id

 代码如下 复制代码
select * from `test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc


子查询解决方案

 代码如下 复制代码
select * from (select * from `test` order by `date` desc) `temp`  group by category_id order by `date` desc

 

热门栏目