2017-01-25 47 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創建一個觀衆曲線。在這裏,您的方法僅在每個用戶同時開始觀看時纔有效: - / –