php - 如何按时间范围从观看开始时间和观看持续时间获取观众?

标签 php mysql time range usage-statistics

我做统计有点问题

人们可以在我的网站上观看视频。我将一些数据存储在 mysql 表 videos_has_views 中

IdUser = the watcher ID
ddv = date of view = the start time of the view
duration = the duration of the view

我想得到的是按时间范围有多少观众活跃的数组。

例如:

John start viewing at 2017-01-01 00:00:00 and watch video for 1800 seconds (30mn)

Hodor start viewing at 2017-01-01 00:00:00 and watch video for 1200 seconds (20mn)

Rob start viewing at 2017-01-01 00:10:00 and watch video for 1800 seconds (30mn)

我试着得到一个像这样的数组

From 0 to 10min : 2 viewers (john + hodor)    
From 10 to 20min : 3 viewers    
From 20 to 30 : 2 viewers (john + Rob)    
From 30 to 40 : 1 viewer (rob)

但我不知道如何用 mysql 或 php 中的循环来解决这个问题? 如果有人对我有想法,我将非常感激

最佳答案

也许是这样的?

SELECT
  CASE
  WHEN duration BETWEEN 0 AND 600 THEN '0to10'
  WHEN duration BETWEEN 601 AND 1200 THEN '10to20'
  WHEN duration BETWEEN 1201 AND 1800 THEN '20to30'
  ELSE 'moreThan30'
  END as duration_range,
  count(IdUser) as cnt
FROM videos_has_views
GROUP BY duration_range
ORDER BY duration_range ASC;

你可以根据需要创建任意数量的范围......它有效(至少在 MySQL 5.7 中) 如果您想在另一列中包含名称,那么(因为我们使用的是 GROUP BY)您可以使用来自名称/用户 ID 或其他内容的 GROUP CONCAT :)

关于php - 如何按时间范围从观看开始时间和观看持续时间获取观众?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41850581/

相关文章:

php - 带有签名 URL 的 Google Storage REST PUT

php - 为什么 PHP 回显的文本会丢失其格式?

java - 如何检查java编译查询中的小于条件?

linux - 在 bash 中从外部服务器打印时间

c++ - 为什么这段带有 std::chrono::system_clock 的代码不工作?

php - WordPress 自定义页面模板和 WP-API

mysql - 合并 MySQL 中多个表的多行

MySQL 在存储过程中返回值

javascript - 如何在节点js中获取日期中的日期名称

PHP Mcrypt,它到底有多安全?