Сколько времени юзер был он-лайн в конкретный день

Kostyab

Новичок
Сколько времени юзер был он-лайн в конкретный день

Всем привет! Задача такая:
Есть определенный юзер, он авторизовывается, потом выходит (допустим, не забывает выйти).
При каждом заходе и выходе я пишу данные в таблицу timemashine:
PHP:
CREATE TABLE `timemashine` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `begin` datetime NOT NULL,
  `end` datetime NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 ;
Мне нужно посчитать, сколько времени за определенный день юзер работал на сайте.
А входить и выходить он может сколько хочет, хоть по 100 раз на дню.
Пробовал делать так:
PHP:
SELECT TIMEDIFF(`end`,`begin`) AS duration 
FROM timemashine
WHERE user_id = '1'
AND DATE_FORMAT(`begin`,'%d') = '".$d."'
где $d -- определенное число месяца.
Чувствую, что время у меня считается не верно. Как сделать правильно?
 

Gas

может по одной?
Код:
SELECT SUM(TIMEDIFF(`end`,`begin`)) AS duration  
FROM timemashine 
WHERE user_id = 1 AND begin BETWEEN '2010-09-20' AND '2010-09-20 23:59:59'
GROUP BY user_id
что касается даты, то надеюсь ты справишься как её правильно в запрос подставить
 

Kostyab

Новичок
Спасибо! С датой, как ее подставить в запрос, я разобрался.
А в какой размерности я получу данные? На экране сейчас что-то вроде 15355.000000
 

dimagolov

Новичок
Kostyab, ну а подумать самому сложно? прикинуть в чем это, в минутах, секундах, часах? ну или почитать на крайняк мануал по TIMEDIFF?
 

Kostyab

Новичок
Уже полчаса читаю мануалы про TIMEDIFF? Не понятно там. Если бы разобрался, не спрашивал бы.
Ладно. Буду находить размерность экспериментальным путем.
За помощь спасибо, все работает!!!
 

dimagolov

Новичок
Уже полчаса читаю мануалы про TIMEDIFF
как можно полчаса читать 2 строки описания и еще 6 строк примеров?

но вообще да, результат получается благодаря SUM, а не TIMEDIFF
 

Kostyab

Новичок
Третий день бьюсь, ничего не выходит.
Пробовал так: $duration = gmdate("H:i:s",$row["duration"]);
Но на выходе получаю не то, что должно быть (если просто посчитать разницу на калькуляторе).
В чем же дело?
 

Gas

может по одной?
в моём запросе есть неточность, я ж их не запускаю, пишу прямо здесь в качестве направляющей идеи :)
результат TIMEDIFF нужно сконвертить во что-то вменяемое, например, SUM(TIME_TO_SEC(TIMEDIFF(`end`,`begin`)))

ну и в запросе нет проверок на граничные условия: если сессия началась в один день, а закончилась уже в следующий.
 
Сверху