Мне нужно удалить строки, в которых поле даты и времени старше 2 недель.
Это то, что я придумал
$duration = Date::WEEK * 2; // int(1209600)
$query = 'DELETE FROM properties
WHERE TIMEDIFF(' . date(DATE_ISO8601) . ', reserved_datetime) > ' . $duration;
Я не часто пишу сложные запросы (предпочитая делать что-то на PHP, где мне удобнее), но я хотел бы узнать о них больше, плюс делать такие вещи на PHP было бы очень неэффективно, и я справляюсь большое количество строк.
Кто-нибудь знает, что я делаю неправильно? Ваше здоровье.
Обновлять
Я дал ответ Уоллика , немного изменив его в phpMyAdmin на SELECT, чтобы я мог видеть, что происходит.
Это то, что я использовал
SELECT *
FROM properties
WHERE date_sub( `reserved_datetime` , INTERVAL 2 week ) >0
LIMIT 0 , 30
Однако единственная проблема заключается в том, что он вернул строки, в которых reserved_datetime
равен 2010-02-28 10:45:59
, определенно менее 2 недель назад (с этого момента).
Я подумал о проверке внутренней даты MySQL. Я использовал date(DATE_ISO8601)
в своих запросах, потому что MySQL NOW()
был не совсем правильным (он просто возвращал, если интересно, 2010-02-28 20:09:19
).
Есть ли способ указать текущую дату в этом запросе? Любые другие предложения?
Большое спасибо
Еще одно обновление
Вот скриншот из phpMyAdmin, который может продемонстрировать что-то лучше, чем мои слова. О, и причина, по которой он вернул только 3, заключается в том, что все остальные имеют пустые значения, то есть 0000-00-00 00:00:00