ОК, следующая задача; У меня есть таблица, которая имеет 3 столбца, ID, UserID и Time, который является типом DateTime. Теперь я хочу получить следующую статистику:
У меня есть 5 диапазонов:
- Утро (6 утра - 11:30 утра)
- Полдень (11:30 - 2:00)
- Полдень (14:00 - 18:00)
- Вечер (с 18:00 до 22:00)
- Ночь (10 вечера - 6 утра)
Пользователь имеет, например, следующие записи:
ID UserID Time
46 1 2011-11-17 17:51:24
47 1 2011-11-17 11:41:41
48 1 2011-11-17 07:31:20
49 1 2011-11-17 21:41:55
50 1 2011-11-17 21:58:28
99 1 2011-11-18 10:12:18
Моя цель - получить следующий массив:
Array (
['today'] => Array (
['morning'] => 1,
['noon'] => 1,
['afternoon'] => 1,
['evening'] => 2,
['night'] => 0
)
['all'] => Array (
['morning'] => 2,
['noon'] => 1,
['afternoon'] => 1,
['evening'] => 2,
['night'] => 0
)
['avg'] => Array (
['morning'] => 1.5,
['noon'] => 0.5,
['afternoon'] => 0.5,
['evening'] => 1,
['night'] => 0
)
)
Ну, это работает, если я действительно перебираю набор результатов всех значений пользователя, но держу пари, что через MySQL и его функции даты есть более простой способ. Также у меня возникают проблемы, если я пытаюсь взять все записи и просто хочу узнать время, а не дату. Мне нужно сначала разобрать его с помощью функций php date и получить само время, и это действительно бесполезно, потому что я, вероятно, получу несколько сотен тысяч этих строк на идентификатор пользователя.
Сама дата должна храниться в таблице для других задач.