Ответ 1
Вы можете вычесть интервал:
DELETE FROM logs WHERE time < now() - interval 1 day
Я нашел тот же самый вопрос here.
Но это не работает для меня. Я немного изменил его, манипулировал им, и я не могу понять. Я пытаюсь удалить строки, которые старше одного дня. Вот мой код:
if (isset($_POST['prune'])) {
$sql = "DELETE FROM logs WHERE time < date('now', '-1 days')";
mysql_query($sql);
echo 'Logs older than one day removed.';
}
Довольно простой вопрос, я полагаю, но его прослушивание черта из меня. Я был бы признателен за любую помощь.
В случае, если это имеет значение, столбец является типом TIMESTAMP
.
EDIT: Видимо я идиот. Вопрос, который я связал с вами, относится к SQLite3. Итак, теперь мой вопрос: как я могу это сделать в MySQL?
Вы можете вычесть интервал:
DELETE FROM logs WHERE time < now() - interval 1 day
Этот ответ был IIRC для SQLite3. Вы используете MySQL, который не поддерживает этот синтаксис.
Вы хотите использовать функцию DATE_ADD() (пример ниже не протестирован, но должен работать):
DELETE FROM logs WHERE time < TIMESTAMPADD(DAY,-1,NOW());
В моем случае только
timestampadd
в положительном направлении работает при прохождении по календарю даты заказа:
if (urldecode ($aUrl['Select']) == '>')
$this-> db-> where ('konzertdatum >', 'TIMESTAMPADD(DAY, 1, "'. $id . '") ', false) ;
else
$this-> db-> where ('konzertdatum < ', 'TIMESTAMPADD(DAY, -1, "'. $id . '") ', false) ;
В отрицательном направлении (-1)
временная метка возвращается к самой первой записи. Я также старался не использовать CodeIgniter, но то же самое.
Подводя итог, +1
в качестве параметра для timestampadd работает, -1
работает для второй самой низкой записи (затем возвращается к первому), но он терпит неудачу, когда я отступаю от первой даты.