Помогите разобраться со статистикой

Tek

Новичок
Помогите разобраться со статистикой

На MySQL есть табличка

user | online | offline


online, offline - timestamp

Нужно в виду таблицы разбитой по месяцам

user | month | online time | offline time

выводить сколько времени пользователь был в онлайн и сколько в офлайн.

Подскажите как такое можно сделать?
 

Tek

Новичок
Фанат
спасибо за ясное объяснение чайнику

по моему форумы существуют для того что бы помочь чайнику
а не издеватся над ним
 

Фанат

oncle terrible
Команда форума
ты забыл вступление
"мы сами не местные. извините что мы к вам обращаемася. нас три семьи ночует на вокщале. мамка больной папка больной, меня послали..."

-~{}~ 26.09.05 21:54:

ForJest
разбитой по месяцам
 

Tek

Новичок
ForJest
спасибо за помощь

-~{}~ 26.09.05 21:58:

Фанат
и как предлагаешь разбивать по месяцам?
 

Фанат

oncle terrible
Команда форума
я думаю, тебе это не будет интересно.
я напишу только принцип. а не готовый код
документацию придётся читать. ужас.

но ты не переживай.
сейчас придёт дядя ForJest - он у нас специалист по готовому коду, напишет в лучшем виде. он просто невнимательно вопрос прочитал.

-~{}~ 26.09.05 22:05:

У меня только один вопрос.
строки в таблицу только добавляются, или же сначала добавляется строка с юзером и онлайн, а потом проставляется оффлайн?
 

Фанат

oncle terrible
Команда форума
таймстамп - это тип поля у тебя или его содержимое?
 

Tek

Новичок
сначала строка с юзером и онлайн, потом проставляеться оффлайн

-~{}~ 26.09.05 22:07:

тип поля
содержимое имеет вид 0000-00-00 00:00:00
 

Фанат

oncle terrible
Команда форума
по месяцам группировать очень просто.
получить из таймстампа месяц с помощью функций даты и времени
http://dev.mysql.com/doc/mysql/ru/Date_and_time_functions.html
и группировать по полученному полю.
а юзера, как я понимаю, послать во where

-~{}~ 26.09.05 22:09:

тип поля
содержимое имеет вид 0000-00-00 00:00:00
ты гонишь.
если это тип поля, то тогда при забивке оффлайна онлайн поменяется на время забивки.
 

Фанат

oncle terrible
Команда форума
тогда не таймстамп.
ты вообще представляешь себе - что такое полне типа таймстамп и зачем оно нужно?
 

Tek

Новичок
судя по тому что пишет дока ты прав


поэтому иду учить мат. часть
 

Фанат

oncle terrible
Команда форума
может, у тебя оффлайн идёт после онлайна и срабатывает правило второго поля?
Вообще странно всё это.
собственно, исходя из этой несуразицы, тебе и ответили про секунды.
поскольку мускулевский таймстамп здесь вряд ли уместен, то ForJest предположил, что у тебя там лежит юникс таймстамп.

а так-то, у тебя не секунды получатся, конечно
 

Tek

Новичок
ну вообще то так и есть оффлайн идет после онлайн
а вопрос про секунды был потому что запрос

SELECT user, SUM( online - offline ) AS online_time
GROUP BY user;

считал неправильно
в нем нехватало UNIX_TIMESTAMP

SELECT user, SUM( UNIX_TIMESTAMP(online) - UNIX_TIMESTAMP(offline) ) AS online_time GROUP BY user;
 

ForJest

- свежая кровь
Короче сделай
SELECT user,DATE_FORMAT('%Y%m'), ...
GROUP BY user, DATE_FORMAT('%Y%m');
У Фаната, как ты видишь, проблемы с практикой, поэтому он не учёл простого случая - перехода с года на год :).
 
Сверху