簡體   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