PHP+MySQL (Задачка)

Evgen58

Новичок
Всем доброго времени суток. В БД в таблице содержится время входа и время выхода пользователя из системы.(например t_in и t_out) в обычной форме (Y-M-D-h-m-s).Необходимо найти,в определенный день, в какое время суток на сайте было максимальное число пользователей. У меня в голове на рисовался пока только один алгоритм: Сначала с помощью sql запроса получаем все t_in и t_out за указанные сутки.
Далее переводим время (например с помощью strtotime) в формат Unix, таким образом что каждое посещение это определенный массив чисел (от t_in до t_out) далее можно все отсортировать и получить наиболее часто встречаемое значение - это и будет временем суток когда на сайте было наибольшее количество посетителей. Но это решение мне не нравится (если пользователей миллион,будет всё очень долго рассчитываться), уверен, что эту задачу можно решить по другому и намного быстрее, поэтому прошу у вас совета.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@Evgen58, делай задачу, а после того, как у тебя начнет тормозить что-то - приходишь и задаешь уже вопрос.

Сейчас у тебя проблема в том, что тебе надо где-то достать кучу данных, чтобы все это тестировать. Их можно сгенерировать, но проблема в том, что твой подход сейчас дает рассчет на каждую секунду времени, поэтому генерить данных придется много ;)
 

WMix

герр M:)ller
Партнер клуба
просто сгруппировать по дате и выбрать максимум количества уникальных пользователей
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@AnrDaemon, это могут быть логи, так что формат более чем уместный. Я думаю он имел в виду обычный datetime, но не через дефис, как он написал)
 

ksnk

прохожий
Вопрос, скорее всего не в форме, а в принципиальной возможности подсчитать что-то этакое на sql.
Принципиально - это возможно. Насчет эффективности - смотреть по месту.
http://sqlfiddle.com/#!9/546e10/16/0
Основной смысл
- собрать все даты в список,
- вывести для каждой записи, попадающей в интервал start-fin - записи :юзер X был во время Y
- сгруппировать получившуюся табличку по времени и посчитать количество юзеров.
P.S.
Что-то странное с SQL фидлом. Вот то же самое на DB fiddle
https://www.db-fiddle.com/f/jNqjBf2vKBpXPj8PAbsNeE/0
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Что такое "время суток"? Зависит ли оно от часового пояса пользователя?
 

Evgen58

Новичок
@Evgen58, делай задачу, а после того, как у тебя начнет тормозить что-то - приходишь и задаешь уже вопрос.

Сейчас у тебя проблема в том, что тебе надо где-то достать кучу данных, чтобы все это тестировать. Их можно сгенерировать, но проблема в том, что твой подход сейчас дает рассчет на каждую секунду времени, поэтому генерить данных придется много ;)
С данными проблем нет) в БД на каждого пользователя указывается только id, время входа и выхода) Через май админ добавить 10-20 записей это дело 2 минут) Конечно по хорошему при авторизации пользователя нужно изменять значение переменной, зашел-прибавили, вышел-вычли.. так было бы намного проще. Но задача стоит именно так.
 

Evgen58

Новичок
Вопрос, скорее всего не в форме, а в принципиальной возможности подсчитать что-то этакое на sql.
Принципиально - это возможно. Насчет эффективности - смотреть по месту.
http://sqlfiddle.com/#!9/546e10/16/0
Основной смысл
- собрать все даты в список,
- вывести для каждой записи, попадающей в интервал start-fin - записи :юзер X был во время Y
- сгруппировать получившуюся табличку по времени и посчитать количество юзеров.
P.S.
Что-то странное с SQL фидлом. Вот то же самое на DB fiddle
https://www.db-fiddle.com/f/jNqjBf2vKBpXPj8PAbsNeE/0
Спасибо. То, что нужно)
 
Сверху