Удаление строк из таблицы MySQL, где метка времени превышает один день?

Я нашел тот же самый вопрос 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?

Ответ 1

Вы можете вычесть интервал:

DELETE FROM logs WHERE time < now() - interval 1 day

Ответ 2

Этот ответ был IIRC для SQLite3. Вы используете MySQL, который не поддерживает этот синтаксис.

Вы хотите использовать функцию DATE_ADD() (пример ниже не протестирован, но должен работать):

DELETE FROM logs WHERE time < TIMESTAMPADD(DAY,-1,NOW());

Ответ 3

В моем случае только

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 работает для второй самой низкой записи (затем возвращается к первому), но он терпит неудачу, когда я отступаю от первой даты.