[英]insert data from one table to another php sql
我正在制作一个私人消息应用程序,并试图创建一个“已删除消息”文件夹,以便用户要从其收件箱或已发送文件夹中删除的消息转到“已删除”。 我设法编写代码以完全删除它们,但是那不是我想要的。 我在数据库中创建了另一个名为“已删除”的表,因此我试图从收件箱中删除它们,然后将其插入到其中。
这是我到目前为止所拥有的:
if ( isset($_GET['delete'])) {
$multiple = $_GET['multiple'];
$i=0;
$q = "insert into deleted (select * from email where to_user = '$user')";
foreach($multiple as $msg_id)
{
$i++;
if ($i==1) {
$q .= " WHERE id = ". mysql_real_escape_string($msg_id)."";
} else {
$q .= "OR id = ". mysql_real_escape_string($msg_id)."";
}
}
mysql_query($q) or die (mysql_error());
header("location: " .$_SERVER['PHP_SELF']);
exit();
}
它给了我这个错误:
您的SQL语法有误; 检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在第1行的“ WHERE id = 14”附近使用
该脚本的输出为:
insert into deleted (select * from email where to_user = '$user') WHERE id = 14
您不能在insert子句上使用WHERE。 您可能正在寻找的是:
insert into deleted (select * from email where to_user = '$user' AND id = 14)
您可以通过调整右括号的位置并调整WHERE子句作为AND来解决。
经过进一步的思考,此ALSO也无法完成您想要的。 您试图将多个ID连接在一起,但是SQL中AND和OR的工作方式将无法完成您的尝试。 OR语句需要包装在方括号中,以确保它被AND语句捕获,如下所示:
INSERT INTO deleted (SELECT * FROM email WHERE to_user = '$user' AND (id = 14 OR id = 15))
您的代码应如下所示:
$q = "insert into deleted (select * from email where to_user = '$user' ";
foreach($multiple as $msg_id)
{
$i++;
if ($i==1) {
$q .= " AND (id = ". mysql_real_escape_string($msg_id)."";
} else {
$q .= " OR id = ". mysql_real_escape_string($msg_id)."";
}
}
$q .= "))"; // Closing out both brackets
为什么要从此学校语法中删除。 使用Triggers
像这样的东西:
CREATE TRIGGER `my_insert_table2_trigger`
AFTER DELETE ON `table1`
FOR EACH ROW
BEGIN
INSERT INTO `table2` VALUES (OLD.id, OLD.Column_with_value)
END
只是想一想-您也可以在表格中添加一列-也许是“ DELETED_FLAG”? -当您希望它显示为“已删除”时可以将其设置为“ Y”。
从长远来看,它将节省一些复杂性。
问题是您在查询中提到了两个WHERE
子句,如下所示。 另外,从select part
删除那些()
$q = "insert into deleted
(select * from email where to_user = '$user')"; <-- Here
foreach($multiple as $msg_id)
{
if ($i==1) {
$q .= " WHERE id = ". mysql_real_escape_string($msg_id).""; <-- Here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.