从表中选择,并将数据插入另一个 - Multiply data -SQL

时间:2011-09-18 14:23:05

标签: php sql insert sql-delete

我有一个按钮,会删除适合此查询的所有用户:

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)))

2 个答案:

答案 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插入移动到触发器

即可

我不建议使用删除标记。你不需要它没有要求恢复已删除的用户,它带来了很多新问题。