如何根据特定字段的值在一定时间后删除记录?

时间:2011-09-15 04:28:55

标签: php mysql database datetime records

我有一个名为 users 的表。该表中的两个字段是“激活”和“ regdate ”。两者都是VARCHAR。如果用户已激活帐户,则激活字段包含字符串“active”。如果用户尚未激活帐户,则该字段包含一个字符串,该字符串是随机的字母数字激活密钥。 regdate 字段包含用户注册帐户的日期和时间,由date("m.d.y H:m:s")填充;

我需要做的是创建一个PHP脚本,该脚本将删除激活字段中不等于“活动”且比我指定的时间长的所有记录。我知道如何通过匹配标准来定位记录,例如选择激活等于“活动”的记录,但我需要它做相反的事情。我需要它来匹配激活不等于“活动”的所有记录(因为随机字符串不可能匹配,不是吗?)。

当然,我还必须根据这些记录的“regdate”字段将所选记录与当前时间进行比较。

所以,简而言之,我有一堆记录,我想删除所有超过一定时间的记录,并且字段不等于“有效”。

如果我没有充分解释这一点,我道歉。我真的很累,这也是我在stackoverflow上的第一篇文章。

2 个答案:

答案 0 :(得分:2)

如果您将regdate字段转换为DATETIME类型,则查询可以简单如下:

DELETE FROM users WHERE activation <> 'active' AND regdate < '2011-01-01'

否则,根据您的regdate VARCHAR的格式,在CAST子句中进行比较之前,您需要CONVERTDATETIMEWHERE。< / p>

这足以让你忘记这项工作吗?

答案 1 :(得分:0)

使用mysqladmin将数据库中的字段更改为“datetime”应该是轻而易举的(数据看起来像这样“2011-09-13 02:08:20”)然后你可以使用标准的mysql命令,如: / p>

mysql_query("DELETE   FROM `iplog` WHERE  DATE(datefield)  <= DATE_ADD(CURDATE(), INTERVAL -2 DAY) AND activation <> 'active'");

这是在我的'iplog'表中删除超过2天且未激活的任何内容。