您现在的位置是: Home> 学无止境> 个人日志> 个人日志

20210907日报

张伟江2021-09-07 10:25个人日志102人已围观

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环境的部署




点赞(0) 打赏

文章评论 共有 0 条评论

暂无评论

本栏推荐

猜你喜欢

站点信息

  • 建站时间:2018年10月24日
  • 网站程序:fastadmin
  • 文章统计276篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信号:zwj982215226

打赏本站

  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!
  • 微信扫码:你说多少就多少~
  • 支付宝扫码:你说多少就多少~

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部