2013-05-02 2 views
0

Итак, у меня есть таблица сеансов, которая по сути имеет следующие столбцы:MySQL дата сравнения от timestamp unix

session_id | user_agent | last_activity (в Отметка времени Unix)

Когда я попытался отобразить session_id и last_activity из сеанса, который создается 5 минут назад, используя этот запрос

SELECT session_id, from_unixtime('last_activity'/1000, '%Y-%m-%d %H:%i') AS session_time 
FROM gw_sessions 
WHERE last_activity >= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 5 MINUTE) * 1000 

Это не работает.

Так что я пытался упростить мой запрос, чтобы только показать все сеансы (session_id и last_activity) с помощью следующего запроса

SELECT session_id, from_unixtime('last_activity'/1000, '%Y-%m-%d %H:%i') AS session_time 
FROM gw_sessions 

Результат показывает, как этот

session_id | session_time 
abcdefg... --> 1970-01-01 07:00 (epoch) 

Почему это не конвертировать правильно ли значение и как я могу сравнить две даты (сейчас()) с датой, хранящейся в формате unix, правильно?

+0

Каковы тип поля и значение last_activity в базе данных? – medina

+0

INT (10) со значением 1367481523, я сделал быструю конвертацию с помощью онлайн-инструмента, отметка времени представляет собой правильную дату. – Jeremy

ответ

1

Ваш запрос возвращает правильную информацию. Посмотрите:

SELECT (1367481523) a, (unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 5 MINUTE) * 1000) b; 
+------------+---------------+ 
| a   | b    | 
+------------+---------------+ 
| 1367481523 | 1367483902000 | 
+------------+---------------+ 

Как вы мне сказали, ваша последняя_активность - это значение «a». И он меньше, чем «b». В вашем запросе вы хотите, чтобы все записи были с 'a'> = 'b' (WHERE last_activity> = unix_timestamp ...).

До сих пор ваш запрос верен. Возможно, ваша логика - это та, которая нуждается в изменении.

[EDIT]

Затем снова проверить возвращаемые даты, значения, которые вы сравниваете переубедить.

mysql> SELECT 
    from_unixtime(1367481523/1000, '%Y-%m-%d %H:%i') a, 
    from_unixtime(1367483902000/1000, '%Y-%m-%d %H:%i') b; 
+------------------+------------------+ 
| a    | b    | 
+------------------+------------------+ 
| 1970-01-17 05:51 | 2013-05-02 18:38 | 
+------------------+------------------+ 
1 row in set (0.00 sec) 

;-)

+0

Хм ... это совершенно странно, посмотрите на скриншот запроса с помощью workbench http://img199.imageshack.us/img199/9482/sql.PNG – Jeremy

+0

mate, проверьте мои издания. – medina

+0

Я полностью потерялся теперь с форматированием времени unix. Я нашел решение, хотя после прочтения вашего предложения снова и снова. Спасибо хоть. – Jeremy

Смежные вопросы