Удалить строку через 1 месяц или 3 месяца в зависимости от выбранного срока действия

0

Я хочу удалить старые записи в моей базе данных, которые хранят запись из HTML-формы, которая состоит из

  1. Я БЫ
  2. название
  3. Эл. адрес
  4. date_of_entry (отметка времени, записанная, когда пользователь отправляет форму)
  5. действительность (пользователь может выбрать либо 30 дней, либо 90 дней как действительность)

Я хочу истечь строку и удалить ее после 30/90 дней в зависимости от периода действия, выбранного из date_of_entry

Я нашел это, но как мне его изменить в соответствии с моими потребностями

DELETE FROM myTable WHERE date_of_entry < DATEADD(MONTH, -1, GETDATE())

Также обратите внимание, что я использую форму, которая отправляет значение в качестве 30 или 90 $duration = $_POST['duration'];

И эта проверка должна выполняться самим MySQL. Я использую phpMyAdmin

Теги:

3 ответа

2
Лучший ответ

В основном вы должны удалять устаревшие строки, где текущая дата превышает date_of_entry и дни validity таким образом:

now() > date_add(date_of_entry, interval validity day)
create table tbl (id int, date_of_entry datetime, validity int);
insert into tbl values
(1, DATE_ADD(NOW(), INTERVAL -31 DAY), 30),
(1, DATE_ADD(NOW(), INTERVAL -29 DAY), 30),
(1, DATE_ADD(NOW(), INTERVAL -92 DAY), 90),
(1, DATE_ADD(NOW(), INTERVAL -89 DAY), 90);
delete 
from   tbl
where  now() > date_add(date_of_entry, interval validity day)
select * from tbl;
id | date_of_entry       | validity
-: | :------------------ | -------:
 1 | 2018-03-11 18:16:43 |       30
 1 | 2018-01-10 18:16:43 |       90

dbfiddle здесь

  • 0
    Не могли бы вы добавить комментарии, чтобы я понял, почему вы используете date_add в запросе на удаление
0

В MySQL вы бы сделали что-то вроде:

delete t from mytable t
    where date_of_entry < curdate() - interval validity day;

Это предполагает, что validity равна либо числу 30, либо 90.

  • 0
    @McNets. , , Я полагаю, вы имеете в виду «почему понизить». Мне тоже любопытно.
  • 0
    Да извини я имел ввиду даунгот
0
DELETE FROM mytable WHERE date_of_entry <
  DATE_ADD( CURDATE() ,INTERVAL validity*-1 DAY) ;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню