Подтвердить что ты не робот

Как удалить запись MySQL через определенное время

Я хочу удалить несколько сообщений из базы данных MySQL через 7 дней.

Мои строки таблицы сообщений имеют такой формат: id | сообщение | дата

Дата - это метка времени в нормальном формате; 2012-12-29 17:14:53

Я думал, что событие MySQL станет способом вместо работы cron.

У меня есть то, что я догадываюсь, это простой вопрос для опытного человека SQL, как мне закодировать фрагмент сообщений delete в скобках ниже?

Пример будет оценен, спасибо.

 DELIMITER $$
   CREATE EVENT delete_event
   ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
   ON COMPLETION PRESERVE
  DO
    BEGIN
      DELETE messages WHERE date >= (the current date - 7 days);
    END;
$$;
4b9b3361

Ответ 1

Вы можете попробовать использовать это условие:

WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY)

Итак, весь SQL script выглядит так:

CREATE EVENT delete_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
ON COMPLETION PRESERVE

DO BEGIN
      DELETE messages WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY);
END;

Однако на вашем месте я бы решил данную проблему с помощью простого cron script. Причины этого очень просты: проще поддерживать код, не уродливые обходные пути SQL, плавно интегрируется с вашей системой.

Ответ 2

Это должно сделать трюк.

DELETE FROM messages WHERE date < (CURDATE() - INTERVAL 7 DAY);

Ответ 3

Для тех, кто находится на общем хостинге, например 1and1, и не может создавать события, альтернативой является использование webcron

Вам просто нужно указать webcron URL-адрес php script, который вы хотите запустить, и они будут запускать его для вас с интервалами, которые вы хотите