2011-08-23 278 views
1

我有一个关于删除已经注册超过24小时的所有未激活帐户的问题。我正在使用MSSQL。删除所有未激活的帐户

数据库设置:

account | usrActivated | regTime 
test   0   1314223187 

SQL查询:

$time = 24 * (60 * 60); 
DROP FROM ACCOUNT_TBL_DETAIL WHERE usrActivated=0 AND regTime < $time 

将这项工作,如果我执行这样的查询?删除超过24小时的未激活帐户。

+1

为什么不先尝试使用SELECT? –

+1

为什么要将日期存储为unix时间戳而不是本机Sql Server'DATE'类型? – NullUserException

+0

没有理由,我只是不知道该怎么办。 – SilentCoder

回答

4
delete from ACCOUNT_TBL_DETAIL 
where usrActivated=0 AND regTime <= UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 1 DAY)); 

假设你在MySQL上。

删除用于从数据库中删除表。删除用于从表中删除记录。

+0

对不起,我的意思是删除。我在SQL Server中使用MSSQL。我不认为Now()是MSSQL中的一个函数。 – SilentCoder

+0

@Silent - 对于SQL Server,你可以使用'regTime <= DATEADD(DAY,-1,GETDATE())' –

+0

@Martin但是这会给你一个日期,而不是一个unix时间戳 – NullUserException

1

不像你表达过的那样,因为那根本不会删除任何东西。无论如何,除非你有1970年创建的账户。试试这个:

DELETE FROM ACCOUNT_TBL_DETAIL 
WHERE usrActivated = 0 
    AND regTime < UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY) 

不要忘了做一个测试运行(更换DELETESELECT *),以确保这你想要做什么。

+0

现在()不是MSSQL中的函数,我猜测。 – SilentCoder

+0

那么,既然你没有指定MSSQL,我们怎么知道呢? – cdhowie

+0

对不起,还有其他方法吗? – SilentCoder

0

听起来不太怀疑,但我想你最终可能会删除在此SQL实际执行之前注册的人。他/她可能正处于激活阶段。

+0

(usrActivated = 0)标识任何没有注册的人,但第二部分(检查一天的时间间隔)会最终删除刚刚注册的人(但尚未激活)。 – Arun

+0

这就是为了防止数据库干净填充垃圾邮件的关键。那么,在注册他们的账户后谁没有激活他们的账户将被删除。 – SilentCoder

+0

让我们说我在11:59 PM注册,浏览频道观看更好的东西。删除脚本在上午12:00开始(我开始注册后1分钟)。我终于决定和Jimmy Fallon一起观看深夜。我回来完成注册 - 尝试激活。那么会发生什么? – Arun

0

让我们说我在11:59 PM注册,浏览频道看 更好的东西。删除脚本在凌晨12:00(在 我开始注册后1分钟)开始。我终于决定与Jimmy Fallon一起观看深夜。我回来完成注册 - 尝试激活。 然后会发生什么? - 阿伦11年8月24日15:50

你可以使它到哪里它删除单独灭活。不仅仅是他们注册后的一天,而是三天?或者你想要的时间很长。但是这并不像剧本每隔三天就会为整个网站开火。这将只是一个人。除非多个用户同时注册,否则这将是脚本唯一会触发的时间。希望这能回答你的问题。