Мне нужно удалить строки, где поле даты и времени старше 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
![query](https://i.stack.imgur.com/PMda9.png)