MySQL выборка записей созданных более часа назад
Есть табличка table с полем date типа datetime, у которого значение по умолчанию установлено CURRENT_TIMESTAMP. Соответственно при создании записей в такой табличке, в поле date лежат даты создания. Мне нужно выбрать все записи созданные более часа назад, как мне лучше это сделать?
Пробовал так:
SELECT * FROM table WHERE date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
Но получается какая-то ерунда...
UPD.
Я понял в чем дело, но не знаю как пофиксить. Запрос вида
SELECT * FROM table WHERE date <= CURRENT_TIMESTAMP() - INTERVAL 1 HOUR;
или
SELECT * FROM table WHERE date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
действительно возвращает правильный результат, но у меня запрос сложнее (вот уж не думал, что это может оказаться граблями). В table есть еще одно поле - status типа tinyint(1) и значением по умолчанию 0. И когда мой запрос выглядит так:
SELECT * FROM table WHERE status = 0 AND date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
или так
SELECT * FROM table WHERE status <> 1 AND date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
то выборка получается неправильная. Причем если сделать отдельно:
SELECT * FROM table WHERE status = 0;
то все нужные записи там будут.
Как бы это пофиксить?
Ответы (2 шт):
SELECT * FROM table WHERE status = 0 AND UNIX_TIMESTAMP(date) <= UNIX_TIMESTAMP() - 3600;
Вы можете использовать SQL-запрос с условием WHERE и функцией DATE_SUB.
SELECT * FROM [Your table]
WHERE date < DATE_SUB(NOW(), INTERVAL 1 HOUR);
Собственно, ничего сложного. Мы получаем все записи и все столбцы *, которые были созданы час назад.
Чтобы добавить другие фильтры для WHERE мы можем использовать оператор AND, пример запроса с записями, которые были созданы час назад и которые имеют status = 1:
SELECT * FROM [Your table]
WHERE date < DATE_SUB(NOW(), INTERVAL 1 HOUR)
AND status = 0;