有没有更简单快捷的方法或思路?我想获取最近72小时访问量最多的10个作品的数据

发布于 2022-09-11 22:33:26 字数 1719 浏览 21 评论 0

某个项目要求获取最近72小时访问量最多的10个作品的数据。
本人菜鸟,写了段代码,感觉太过复杂,想问有没有更好的方法或思路。

首先,访问记录的数据表结构如下:

  `visit_id` bigint(20) unsigned NOT NULL,
  `works_id` mediumint(9) NOT NULL,
  `visit_time` datetime NOT NULL,
  `ip_adr` varchar(30) NOT NULL,
  `is_mobile` char(6) NOT NULL,
  `mobile_brand` char(10) NOT NULL,
  PRIMARY KEY (`visit_id`),
  KEY `works_id` (`works_id`)

每个作品产生访问时,都会按以上结构写入访问数据。

我写的php代码如下:

        M('visit')->cache('visit_data',120)->order('visit_id')->select(); //取出所有访问数据并缓存120秒
        $visit_data=S('visit_data'); //读取缓存

        $seven_days_before=time()-3600*24*3; //前72小时
        $array_three_days=array();
        foreach($visit_data as $key=>$value){
            $visit_time=strtotime($value['visit_time']);
            if(($visit_time>$seven_days_before)&&($visit_time<time())){ //前72小时到现在
                $array_three_days[$key]=$value;
            }
        }
        
        foreach ($array_three_days as $key => $value) {
            $array_temp_id[$key]=$value['works_id']; //从最近3天的数据中取出works_id
        }
        $count_works_id=array_count_values($array_temp_id); //计算不同的works_id的个数
        arsort($count_works_id); //对works_id的个数进行排序

        $index_temp=0;
        $auth_code_key=C('auth_code_key');
        foreach ($count_works_id as $key => $value) {
            $works_code=encrypt($key,$auth_code_key); //通过项目专用的加密方法得到works_code
            $count_visit_result[$index_temp]=array($key,$works_code,$value); //新数组,每个元素包含works_id, works_code, 访问次数
            $index_temp++;
        }
        $count_visit_result=array_slice($count_visit_result,0,10); //取出前10个

想问有没有更快更好的方法或思路?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笨笨の傻瓜 2022-09-18 22:33:26

M('visit')->field('count("vistid") as count,*')->where('visit_time>'.$seven_days_before)->group('vistid')->order('count')->limit(0,10)->select();
直接mysql 分组排序就完了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文