2013-08-25 2 views
0

Я пытаюсь получить запрос sql для возврата записей, созданных за последние 7 дней.Проблема с использованием TimeStampDiff() В запросе SQL

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

SELECT * FROM `messages` WHERE TIMESTAMPDIFF(DAY, time, NOW()) <= 7 

По какой-то причине это возвращающий список записей с 2011 года!

Является ли это простой синтаксической ошибкой, я делаю неправильно?

Я также попытался с помощью DATEDIFF()

SELECT * FROM `messages` WHERE DATEDIFF(NOW(), time) <= 7 

Но это, кажется, чтобы дать мне те же неправильные результаты. Я подозреваю, что это связано с тем, что DATEDIFF не работает с меткой времени UNIX?

У меня есть другой запрос, который я использую в другой таблице, которая использует запрос DATEDIFF(), и работает отлично, но в этой таблице есть столбец фактической даты, а не временная метка.

Извините, если это простой ответ, но я играл с этим какое-то время, но безрезультатно!

ответ

1

Попробуйте следующий запрос:

SELECT * 
FROM messages 
WHERE time > UNIX_TIMESTAMP(NOW()) - 604800 

Небольшое пояснение: 7 дней = 168 часов = 10 080 минут = 604 800 секунд.

Поскольку временные метки UNIX - это количество секунд, прошедших с 1970-01-01 00:00:00, вам нужно будет вычислить секунды. Большинство функций даты/времени в MySQL бесполезны, поскольку они работают только с собственным форматом MySQL для хранения дат и времени.

+0

Я боюсь, что ничего не вернулся – robobobobo

+0

Weird ... [SQL-Fiddle] (http://sqlfiddle.com/#!2/5294e/1/0) –

+0

Мои метки времени в этом формате 1375469304, может ли это повлиять на это? – robobobobo

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