Нужна помощь при разборе данных из бд mysql

jone31

Новичок
Нужна помощь при разборе данных из бд mysql

вообщем такая ситуация:
пишу скрипт подсчета онлайн времени юзера. Имеется только лог таблица ICQ чат-бота, где есть время входа юзера и время выхода, но по моим наблюдениям иногда время выхода отсутствует, (возможно это выход из аси, без выхода из чата или что то подобное), в чате стоит таймер - если юзер некоторое время ничего не пишет то он принудительно выходит из чата, но при этом в таблице бд это нкиак не отражается, поэтому если нету времени выхода то эта точка входа пропускается и берется следущая. Одним словом в статистике считаются только пары вход/выход..

в таблице есть поля `user_id` это ид юзера, а `type` может быть STATE_IN(вход юзера), STATE_OUT(выход юзера, но его иногда не бывает) и поле time`, его значение это штамп времени(CURRENT_TIMESTAMP)

мне нужно узнать разницу во времени между входом и выходом конкретного пользовтеля.

догадываюсь что может помочь перебор массива, но незнаю точно как его применить здесь...
 

prolis

Новичок
и совсем для красоты
[sql]
ifhull(STATE_OUT, ADDTIME(STATE_IN,'0:1:0.000000')) - STATE_IN
[/sql]
(если нет сведений о выходе, то пологаем, что минуту он пробыл)
 

jone31

Новичок
мне не интересует как узнать разницу во времени между двумя датами.

Меня интересует как отловить пару вход/выход, и если есть вход, но нет выхода то это игнорировать.
 

Urville

Новичок
Перебираешь элементы массива, если текущий элемент вход, смотришь следующий: если выход - считаешь, если опять вход - ничего не делаешь. Само собой массив должен быть отсортирован по времени.
 

prolis

Новичок
на наку, не кричи
[sql]
create table logs as
select t1.user_id,t1.time as STATE_IN, min(t2.time ) as STATE_OUT
from table t1,table t2
where t1.user_id=t2.user_id
and t1.type='STATE_IN'
and t2.type='STATE_OUT'
and t2.time>t1.time
group by t1.user_id,t1.time
[/sql]
правда при отсутвии выхода надо ещё отфильтровать дату выхода - она будет дублироваться у двух записей

-~{}~ 15.07.10 13:24:

вот как-то так
[sql]
select user_id, max(state_is) as state_in, state_out from
(SELECT t1.user_id, t1.time AS STATE_IN, min( t2.time ) AS STATE_OUT
FROM TABLE t1,
TABLE t2
WHERE t1.user_id = t2.user_id AND t1.type = 'STATE_IN' AND t2.type = 'STATE_OUT' AND t2.time > t1.time
GROUP BY t1.user_id, t1.time)
group by user_id, state_out
[/sql]
 

jone31

Новичок
объясните, а почему предлагаются решения подсчета только mysql? почему не php&mysql ?
 

prolis

Новичок
jone31
По той же причине, что автомобиль тебе собирают на заводе, а не привозят груду запчастей клиенту.
Я не про автоваз:)
 
Сверху