我有一个按钮,会删除适合此查询的所有用户:
DELETE FROM users WHERE lastlogin < ".time()." - ".$sdata['activitylimit']."*3600
虽然,我必须将每个用户数据的某些部分,并将其放入另一个表(“用户名”和“电子邮件”)
如何从表用户中获取用户的用户名和电子邮件,并将其插入我的表“reserved_data”?
表reserved_data如下所示:
id (just the id)
data (the email or username value)
type (what type of data is it((username/email)))
答案 0 :(得分:0)
由于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
数据。
答案 1 :(得分:0)
您还可以使用删除触发器将数据记录到reserved_data表。只需将您的reserved_data插入移动到触发器
即可我不建议使用删除标记。你不需要它没有要求恢复已删除的用户,它带来了很多新问题。