繁体   English   中英

从一个表插入数据到另一个PHP SQL

[英]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.

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