预备知识:group by,MySQL函数week()、month()
在设计数据库时一般都有一个字段来记录文章的点击率,如果我们要统计一周或一个月点击率排行光靠这一个字段是肯定是无法实现的。这时就要新建一个表,用来记录每篇文章每天的点击率。
假设这个表名为ranking,定义四个字段:rid(表ID),contentid(与文章ID关联),hits(记录每天点击率),date(时间,重要,查询时作比较)
ranking大致结构
id contentid hits date
1 2 12 2010-12-18
2 2 23 2010-12-19
3 1 15 2010-12-19
4 2 21 2010-12-20
一、统计
第一步就是要记录文章每天的点击率,这步非常简单
二、查询
此时统计工作已经完成,接下来要把这些文章按一周或一个月点击率总和的顺序查询出来,这是个难点。
1.先要给文章分组并计算总点击率:
2.取本周数据筛选出来:
- SELECT *,SUM(hits) FROM ranking GROUP BY contentid ORDER BY SUM(hits) DESC
- select *,sum(hits) from ranking where week(date)=week(now()) group by contentid order by sum(hits) desc
这是周排行的查询语句,相对比较复杂,查询出来后再放到数组中依次显示出来,月排行也是这样,换一下函数就行,完整的PHP代码我就不写出来了。