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

某个项目要求获取最近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个

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

阅读 1.6k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题