将数据从一个表插入另一个php sql

时间:2014-06-02 16:48:30

标签: php mysql

我正在制作私信消息应用程序,而我正在尝试创建一条已删除的消息'文件夹,以便用户想要从其收件箱或已发送文件夹中删除的邮件将被删除'。我设法编写代码来完全删除它们,但这不是我想要的。我在我的数据库中创建了另一个表,名为'已删除'所以我试图从收件箱中删除它们然后将它们插入那里。

这就是我现在所拥有的:

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服务器版本对应的手册,以便在#< WHERE id = 14'附近使用正确的语法。在第1行

4 个答案:

答案 0 :(得分:1)

此脚本的输出为:

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

答案 1 :(得分:0)

为什么要删除这个学校的语法。使用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

答案 2 :(得分:0)

只是一个想法 - 你也可以在你的桌子上添加一个列 - 也许是'DELETED_FLAG'? - 当您希望它显示为“已删除”时,您可以设置为“Y”。

从长远来看,这将节省一些复杂性。

答案 3 :(得分:0)

问题是您的查询中提到了两个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