你不能直接这样做,由于reserved_data
表的表布局。你为什么这样做?为什么你没有得到deleted_users
表,包含他们的用户名和电子邮件?这样,你可以这样做:
$q1 = "INSERT INTO deleted_users (username, email) SELECT username, email FROM users WHERE lastlogin < (".time()." - ".$sdata['activitylimit']." * 3600)";
$q2 = "DELETE FROM users WHERE lastlogin < (".time()." - ".$sdata['activitylimit']." * 3600)";
如果你不改变表,使用这样的:你看后者
$toDelete = mysql_query("SELECT username, email FROM users WHERE lastlogin < (".time()." - ".$sdata['activitylimit']." * 3600)");
while($user = mysql_fetch_assoc($toDelete))
{
mysql_query("INSERT INTO reserved_data (`data`, `type`) VALUES ('" . $user['username'] . ", 'username'");
mysql_query("INSERT INTO reserved_data (`data`, `type`) VALUES ('" . $user['email'] . ", 'email'");
}
// Now perform the delete
mysql_query("DELETE FROM users WHERE lastlogin < (".time()." - ".$sdata['activitylimit']." * 3600)");
需要更多的代码,通常是一个坏主意。你失去了用户名和它的电子邮件地址之间的关系。
另外,您可能希望使用事务,因为可能不会将其包含在第一个查询中,而是包含在第二个查询中。您然后失去此用户的数据。
也许你可以通过简单地将(in)active
列添加到用户表中来解决所有问题。一个很少要真的delete
数据。
非常感谢。我现在用桌子了解问题。我遵循你的建议,并与deleted_users表一起去。现在看起来更符合逻辑。非常感谢! –
不客气。请注意编辑,您可能想要“停用”用户,这很容易通过添加指示用户是否处于活动状态的列来完成。 – CodeCaster