2017-01-25 2 views
1

統計を作るのに少し問題があります。ビューの開始時間とビューの再生時間から視聴者を取得するにはどうすればよいですか?

人は私のウェブサイトでビデオを見ることができます。私は私が取得したいと思いは、多くの視聴者が時間帯によってアクティブであったかの配列です

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

videos_has_views MySQLのテーブル内のいくつかの件のデータを格納します。例えば

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はありません。しかし、 'BETWEEN'やDATE関数のようなmysqlのルックアップ関数。あなたはSQLを作成することができます:ビデオxyを見たすべての視聴者に、Y-M-DH:I:Sから10分間与えます。しかし、あなたはそれを自分で試す必要があります。 Googleより多くのヒントがあります。 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を使用しているので)あなたはすることができます名前/ユーザーIDなどからGROUP CONCATを使用してください。

+0

こんにちは。あなたの答えに感謝します。 私はそれが良いトラックだと思いますが、私が検索するゴールではありません。ここでは、視聴開始時間に関係なく、X秒とX + 10秒の間に視聴したユーザーの数がわかりました。 私がやるべきことは、放送中の時間Tに視聴者のカーブを作成することです。ここで、あなたの方法は、すべてのユーザーが同時に視聴を開始する場合にのみ機能します: - / –

関連する問題