swanrnd
@swanrnd
Издатель HTML5 игр

Как вывести точки которые попали в интервал?

Сформулировал жутко.
Однако все проще.
Имеем 3 колонки:
1) id пользователя
2) время начала сессии (unixtime)
3) время конца сессии (unixtime)
Пример:
1, 111111-111211
2, 111111-111411
3, 111111-111211
1, 111311-111411

Вот, надо вывести пользователи в онлайн по часам.
Допустим
18:00-19:00 - 10 человек онлайн.
19:00-20:00 - 15 человек онлайн.

Есть ли простой вариант вариант решения?
Ибо мне в голову приходит 24 запроса такого вида
SELECT count(1) FROM table WHERE time_end>@time_end and time_start<@time_start;
  • Вопрос задан
  • 571 просмотр
Пригласить эксперта
Ответы на вопрос 3
Mutt
@Mutt
Software developer
Наверное нужно сгрупперовать по времени? В гугле куча ответов на вопрос "mysql group by 1 hour", выбирать какой понравится вам.
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега MySQL
Если сессии не очень длинные и в точном значении нет необходимости, то так:
SELECT 
	COUNT(`id`),
	DATE_FORMAT(`start`, '%Y%m%d%H') AS 'hour'
FROM 
	`users`
WHERE 1
	GROUP BY `hour`
Ответ написан
Я бы сделал справочник, с необходимыми интервалами времени (допустим сутки, разбитые по 1 часу), назовем calendar, и сделал JOIN, с вот таким ограничением:
calendar.MyHour between "время начала сессии" and "время конца сессии".
Тем самым, каждую строку исходной таблицы мы множим на количество временных интервалов, которые она охватывает.
Сразу вижу еще 1 место для проработки, если временной интервал охватывает несколько дней, то нужен второй справочник, с днями, у меня такой называется DAYS, где список дат (в прошлое и будущее) с кучей полезной информации по календарю, работаем с ним аналогичным образом.

Если что-то непонятно объяснил, могу подробнее...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы