我有一个名为 users 的表。该表中的两个字段是“激活”和“ regdate ”。两者都是VARCHAR。如果用户已激活帐户,则激活字段包含字符串“active”。如果用户尚未激活帐户,则该字段包含一个字符串,该字符串是随机的字母数字激活密钥。 regdate 字段包含用户注册帐户的日期和时间,由date("m.d.y H:m:s")
填充;
我需要做的是创建一个PHP脚本,该脚本将删除激活字段中不等于“活动”且比我指定的时间长的所有记录。我知道如何通过匹配标准来定位记录,例如选择激活等于“活动”的记录,但我需要它做相反的事情。我需要它来匹配激活不等于“活动”的所有记录(因为随机字符串不可能匹配,不是吗?)。
当然,我还必须根据这些记录的“regdate”字段将所选记录与当前时间进行比较。
所以,简而言之,我有一堆记录,我想删除所有超过一定时间的记录,并且字段不等于“有效”。
如果我没有充分解释这一点,我道歉。我真的很累,这也是我在stackoverflow上的第一篇文章。
答案 0 :(得分:2)
如果您将regdate
字段转换为DATETIME
类型,则查询可以简单如下:
DELETE FROM users WHERE activation <> 'active' AND regdate < '2011-01-01'
否则,根据您的regdate VARCHAR的格式,在CAST
子句中进行比较之前,您需要CONVERT
或DATETIME
到WHERE
。< / 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天且未激活的任何内容。