有没有更简单快捷的方法或思路?我想获取最近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个
想问有没有更快更好的方法或思路?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
M('visit')->field('count("vistid") as count,*')->where('visit_time>'.$seven_days_before)->group('vistid')->order('count')->limit(0,10)->select();
直接mysql 分组排序就完了