У меня есть небольшая проблема, чтобы сделать статистику.
люди могут смотреть видео на моем сайте. Я храню некоторые данные в таблице 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), вы можете использовать GROUP CONCAT из имен / идентификаторов пользователя или чего-то еще 🙂
Других решений пока нет …