MySQL - возвращать только записи за последние X дней - PullRequest
1 голос
/ 23 августа 2009

Я работаю с базой данных, в которой информация о дате хранится в виде метки времени Unix (int (11)), и я хочу лишь возвращать записи за последние X дней, например за последние 90 дней.

Я придумал:

SELECT * FROM mytable WHERE category=1 AND 
FROM_UNIXTIME( time ) > DATE_SUB(now(), INTERVAL 91 DAY)

Где «время» - это int (11) в БД. Кажется, это работает нормально, но просто интересно, что об этом думают другие.

Ответы [ 4 ]

2 голосов
/ 23 августа 2009
SELECT * FROM mytable WHERE category=1 AND 
time > (UNIX_TIMESTAMP() - ((60*60*24)*90))

или просто

ВЫБРАТЬ * ИЗ mytable WHERE категории = 1 И время> (UNIX_TIMESTAMP () - (86400 * 90))

это просто сравнение числа (в данном случае, секунд)

0 голосов
/ 23 августа 2009

В чем причина хранения метки времени как int? Я бы использовал тип данных mysql DATETIME , потому что вы можете использовать множество функций даты и времени mysql имеет.

Если у вас нет контроля над типом данных этого поля, я бы преобразовал вашу дату в метку времени unix int перед выполнением запроса и сравнил ее таким образом.

0 голосов
/ 23 августа 2009

Этот запрос обязательно вызовет у вас головную боль, поскольку MySQL должен выполнить преобразование дат для каждой строки, что делает невозможным использование индексов. Временные метки Unix являются числами, поэтому вместо преобразования временной метки в другой формат даты конвертируйте даты поиска в временные метки Unix.

0 голосов
/ 23 августа 2009

Просто мысли вслух ... разве это не повлияло бы на работу БД?

time > UNIX_TIMESTAMP( DATE_SUB(NOW(), INTERVAL 91 DAY) )
...