您现在的位置是: 首页> 学无止境> 个人日志> 个人日志
20210907日报
陈健2021-09-07 10:25【个人日志】1043人已围观
9:00-11:30研究访客总览页面停留时间的问题。
理解:独立访客英文unique visitor,叫唯一访客也叫去重访客,今日(过去7日)独立访客就是值今日(过去7日)第一次进入的页面是独立访问,其他访问页面就算重复访问。
问题:查询2021-09-07号停留时间11-30s内的独立访客数为多少?
CREATE TABLE `fa_record` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'url',
`device_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '设备ID',
`createtime` int(10) DEFAULT NULL COMMENT '创建时间',
`play_time` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '停留时间',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `fa_record` VALUES ('1', 'index', '48ab8b897a95fe32', '1630979400', '3.1');
INSERT INTO `fa_record` VALUES ('2', 'index', '48ab8b897a95fe32', '1630979438', '15');
INSERT INTO `fa_record` VALUES ('3', 'index', '537ec0792b9b739a', '1630979452', '11');
INSERT INTO `fa_record` VALUES ('4', 'index', '537ec0792b9b739a', '1630979686', '23');
解决方法:
1、首先查询2021-09-07号的独立访客数(不去重),获取到的结果条数为$count,sql语句如下:
select count(*) from (select * from fa_record where createtime between 1630944000 and 1631030399 and play_time between 11 and 30 group by device_id)
2、然后求出每个访客2021-09-07第一次进入页面的时间,sql如下:select device_id,min(createtime) as join_time from fa_record where createtime between 1630944000 and 1631030399 group by device_id
3、然后把device_id作为数组的key形成一个新的二维数组,如下图:
4、获取2021-09-07号的所有进入页面记录,sql如下
select * from fa_record where createtime between 1630944000 and 1631030399
5、循环第四步的数组,判断每一条device_id在第三步处理后的数组的key中是否存在,如果存在但是createtime不等于第三步数组key对应数组里的createtime,则表示这条记录是重复访客,则需要去重,就将第一步获取到的数量减一:$count = $count-1,
15:00-18:00 研究shopro环境的部署
上一篇:20210906日报
下一篇:20210908日报
发表评论 取消回复