2015-01-05 4 views
1

У меня есть сомнение в запросе sql в php. При входе в систему текущая дата и время закрываются на 'strtotime', хранящиеся в базе данных. Время выхода из системы также вводится в базу данных. Человек может войти в систему более одного раза в день ,Как получить строки с диапазоном дат?

Я хочу перечислить каждый раз, когда пользователь входа в систему за последние 7 дней (каждый день отдельно для каждого пользователя) .Я использовал следующий запрос

"SELECT a.user_id, b.username, a.clock_in,a.clock_out , DATEDIFF(a.clock_in,a.clock_out) FROM " . DB_PREFIX . "clock_history a left join " . DB_PREFIX . "user b on a.user_id=b.user_id WHERE clock_in between '".$prestrtime."' and '".$curren."' and clock_status=0 and b.status=1 ORDER BY id DESC " 

, приведенные ниже, формат таблицы

id user_id  clock_in clock_out clock_status 

1 1   1419829200 1419829800  0 
2 2   1419829200 1419851689  0 
3 1   1419851633 1419851677  0   

While использование этой записи запроса для каждого дня не может быть разделено. Пожалуйста, помогите мне .. Ждем вашего ответа!

+0

У вас есть временная метка, так почему вы не можете ее преобразовать на сегодняшний день? 'date ('d', $ timestampFromDB)' – Justinas

+0

Мне нужны часы, логин для каждого дня. Пользователь может войти в систему более одного раза в день. Мне нужно общее количество часов входа в каждый день каждого отдельного пользователя. – user892923

ответ

0

Вы можете рассчитать последние 7 дней от MYSQL запрос смотри ниже

SELECT a.user_id, b.username, a.clock_in,a.clock_out , 
DATEDIFF(FROM_UNIXTIME(a.clock_in),FROM_UNIXTIME(a.clock_out)) 
FROM " . DB_PREFIX . "clock_history a 
left join " . DB_PREFIX . "user b on a.user_id=b.user_id 
WHERE clock_in between UNIX_TIMESTAMP(date_sub(now(),INTERVAL 1 WEEK)) and UNIX_TIMESTAMP(now()) 
and clock_status=0 and b.status=1 
ORDER BY id DESC 

UPDATE DATE_DIFF() функция работает с две даты не метки времени, поэтому преобразование временных меток в сроки, используя FROM_UNIXTIME() функцию

DATEDIFF(a.clock_in,a.clock_out) 

до

#it return days, if you need hours then `/24` of total days 
DATEDIFF(FROM_UNIXTIME(a.clock_in),FROM_UNIXTIME(a.clock_out)) 
+0

Поле DATEDIFF (a.clock_in, a.clock_out) содержит значение NULL – user892923

+0

'DATEDIFF (date1, date2)' функция работает между двумя датами не временными отметками ... вы можете создать формат временных меток или, если вам не нужна точная дата, тогда вы (a.clock_in - a.clock_out)/60/60/24 as total_days' – Girish

+0

Мне нужны общие часы, которые пользователь заходил за каждый день, а не дата за последние 7 дней – user892923

0

Попробуйте

SELECT a.user_id, b.username, a.clock_in,a.clock_out, 
DATEDIFF(FROM_UNIXTIME(a.clock_in), FROM_UNIXTIME(a.clock_out)) as days 
FROM " . DB_PREFIX . "clock_history a 
LEFT JOIN " . DB_PREFIX . "user b on a.user_id=b.user_id 
WHERE clock_in BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY)) 
    AND UNIX_TIMESTAMP(NOW()) 
AND clock_status=0 AND b.status=1 
ORDER BY id DESC 

Это даст вам записи из последних 7 дней, он использует MySQL, встроенная функция NOW() и DATE_SUB().

+0

Функция DATEDIFF (a.clock_in, a.clock_out) возвращает значение NULL – user892923

+0

использовать 'FROM_UNIXTIME()' для преобразования значений метки времени в a.clock_in & a. Cloc k_out в формат даты, который 'DATEDIFF' может легко распознать и вернуть no. дней. 'DATEDIFF (FROM_UNIXTIME (a.clock_in), FROM_UNIXTIME (a.clock_out)) как дни' –