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