2017-01-25 25 views
1

我有一个小问题来做统计。如何从查看开始时间和查看时间的时间范围获取观众?

人们可以在我的网站上观看视频。我存储在MySQL表一些DATAS 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中循环? 如果有人有我的想法我会非常感谢

+0

你不具体在这里enuff。但在mysql中查找函数,如'BETWEEN'和DATE函数。我可以为以下内容创建一个SQL:给我的所有观看者看过来自Y-M-DH:I:S的视频xy,时间为10分钟。但是你必须为自己尝试一下。谷歌更多,你会发现一些提示。 https://dev.mysql.com/doc/refman/5.7/en/ – JustOnUnderMillions

+0

你的SQL表是什么样的? –

+0

向我们展示表格和一些示例数据..无图像,但文字 –

回答

0

也许是这样的?

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),您可以使用GROUP CONCAT从名称/用户ID或任何:)

+0

嗨。感谢您的回答。 我认为这是一个很好的曲目,但不是我搜索的目标。在这里,我们发现无论观看的开始时间有多少用户都在X秒和X + 10秒之间观看。 我想要做的是在我的广播期间在时间T创建一个观众曲线。在这里,您的方法仅在每个用户同时开始观看时才有效: - / –