根据所选的有效性,在1个月或3个月后删除一行

时间:2018-04-09 17:03:25

标签: php html mysql sql

我想删除数据库中的旧记录,该记录存储来自HTML表单的条目,该表单由

组成
  1. ID
  2. 名称
  3. 电子邮件
  4. date_of_entry(用户提交表单时记录的时间戳)
  5. 有效期(用户可以选择30天或90天作为有效期)
  6. 我想根据从date_of_entry中选择的有效期

    ,在30/90天之后删除该行并将其删除

    我发现了这个,但我如何修改它以满足我的需要

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

    另请注意,我使用的表单的有效期为30或90 $duration = $_POST['duration'];

    此检查应由MySQL本身执行。我正在使用phpMyAdmin

3 个答案:

答案 0 :(得分:2)

基本上,您必须以这种方式删除当前日期超过date_of_entryvalidity天的过时行:

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 here

答案 1 :(得分:0)

在MySQL中你会做类似的事情:

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

这假设validity是数字30或90。

答案 2 :(得分:0)

DELETE FROM mytable WHERE date_of_entry <
  DATE_ADD( CURDATE() ,INTERVAL validity*-1 DAY) ;