繁体   English   中英

从表中选择,并插入到另一个数据 - 数据乘以-SQL

[英]Select from table, and insert data to another - Multiply data -SQL

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

DELETE FROM users WHERE lastlogin < ".time()." - ".$sdata['activitylimit']."*3600

虽然,我必须将每个用户数据的某些部分放入另一个表中(“用户名”和“电子邮件”)

我怎样才能从表users中获取用户名和电子邮件,并将其插入到我的表“ reserved_data”中?

该表reserved_data如下所示:

id (just the id)
data (the email or username value)
type (what type of data is it((username/email)))

由于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数据。

您也可以使用删除触发器将数据记录到reserved_data表中。 只需将您的reserved_data插入移动即可触发

我不建议使用带有删除标记的方法。 您不需要它,不需要还原已删除的用户,这会带来很多新问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM