![](/img/trans.png)
[英]Select data from db table 1 and insert it into another db table 2 in php
[英]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.