PHP实现周排行榜,月排行开发思路

在设计数据库时一般都有一个字段来记录文章的点击率,如果我们要统计一周或一个月点击率排行光靠这一个字段是肯定是无法实现的。这时就要新建一个表,用来记录每篇文章每天的点击率。

有时候需要做一些排行榜来体现出用户的活跃度,原理就是先判断当前文章的日期是否为当月当日当周的,是就点击数加1

在设计数据库时一般都有一个字段来记录文章的点击率,如果我们要统计一周或一个月点击率排行光靠这一个字段是肯定是无法实现的。这时就要新建一个表,用来记录每篇文章每天的点击率。

这里我取名为ranking,定义四个字段:id(表ID),articleid(与文章ID关联),hits(记录每天点击率),date(时间,重要,查询时作比较)

第一步:更新

就是要记录文章每天的点击率,这步非常简单,当用户查看某篇文章时或在某一个节点都可以,先判断是否存在该条记录,如果不存在,说明是当天第一次浏览该文章,需要插入一条记录,后面的访客再看这篇文章时,只要更新点击率就行。这就是记录某篇文章一天的点击率。

$rank_time = date('Y-m-d',time());
$articleid = input('articleid');
$checkRank = db('ranking')->where(['articleid' => $articleid, 'date' => $rank_time])->find();
if ($checkRank) {
 db('ranking')->where(['articleid' => $articleid, 'date' => $rank_time])->setInc('hits');
} else {
db('ranking')->insert(['articleid' => $articleid, 'hits' => '1', 'date' => $rank_time]);
}

第二步:查询

接下来要把这些文章按一周或一个月点击率总和的顺序查询出来

给文章分组并计算总点击率:

//原生
select *,sum(hits) from ranking group by articleid order by sum(hits) desc
//thinkphp5
db('ranking')->field('*,sum(hits) as total_count')->group("articleid")->order('total_count desc')->limit(10)->select();

本周数据查询

//原生
select *,sum(hits) from ranking where week(date)=week(now()) group by contentid order by sum(hits) desc;
//thinkphp5
db('ranking')->field('*,sum(hits) as total_count')->where('week(date)=week(now())')->group("articleid ")->order('total_count desc')->limit(10)->select();

这是周排行的查询语句,相对比较复杂,查询出来后再放到数组中依次显示出来,月排行也是这样,换一下函数就行

还有一种思路就是查询最近几天的点击量等数据

db('user')->whereTime('reg_time','>','-2 days')->select();//查询前两天的数据
db('user')->whereTime('reg_time','>','this week')->select();//查询本周的数据

原创文章,作者:ECHO陈文,如若转载,请注明出处:https://www.luweipai.cn/php/42896458/

  • 0