Я регистрирую статистику геймеров в своем сообществе. Для обоих онлайновых и внутриигровых состояний я регистрируюсь, когда они "начинают" и когда они "заканчиваются". Чтобы показать самый активный день и час дня, я хотел бы использовать инструкцию SQL, которая измеряет наиболее активные моменты, основанные на значениях "начало" и "конец" даты и времени.
Глядя на SQL - выберите наиболее "активное" время из db. Я вижу сходства, но мне нужно также включить моменты между началом и временем окончания.
Возможно, самый простой способ - написать cron, который выполняет вычисления, но я надеюсь, что этот вопрос может научить меня, как решить эту проблему в SQL вместо этого.
Я искал инструкцию SQL, которая позволяет создать период времени datetime и использовать это, чтобы вычитать один час и несколько дней. Но безрезультатно.
--- обновить
Как я уже думаю об этом, мне интересно, может ли быть разумным запускать 24 запроса на основе каждого часа дня (для большинства активных часов) и нескольких запросов для самого активного дня. Но это кажется пустой тратой производительности. Но это решение может сделать возможным запрос, например:
SELECT COUNT(`userID`), DATE_FORMAT("%H",started) AS starthour,
DATE_FORMAT("%H",ended) AS endhour
FROM gameactivity
WHERE starthour >= $hour
AND endhour <= $hour GROUP BY `userID`
($ hour добавляется, например, для целей, конечно, я использую PDO. Столбцы также являются, например, целями, независимо от того, что вы считаете легким для использования в объяснении, которое можно идентифицировать, поскольку начало и конец в порядке со мной )
Дополнительная информация; PHP 5.5+, PDO, MySQL 5+ Таблица layout для ingame будет: gameactivity: activityid, userid, gameid, запущен, закончился
DDL:
CREATE TABLE IF NOT EXISTS `steamonlineactivity` (
`activityID` int(13) NOT NULL AUTO_INCREMENT,
`userID` varchar(255) NOT NULL,
`online` datetime DEFAULT NULL,
`offline` datetime DEFAULT NULL,
PRIMARY KEY (`activityID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;