簡體   English   中英

結果不在csv文件中時,從表中刪除行

[英]Delete rows from table when the result are not in a csv file

我有這段代碼從csv文件插入值。 當數據庫中已存在該行時,將更新某些值。 就是我想要的樣子。

INSERT INTO test_table (`id`,`order_id`,`quantity`,`price`,`order_date`,`shipping_date`)
                    VALUES ('$orderId', '$quantity', '$price', '$orderDate', '$shippingDate')
                    ON DUPLICATE KEY UPDATE `order_date` = '$orderDate', `shipping_date` = '$shippingDate'"

但是,當該行不在csv上時,必須將其從數據庫中刪除。 例如:

CSV文件:

order_id  quantity price order_date shipping_date
1          10      1.00  2016-10-5  2016-10-6

我運行腳本,並將csv的結果添加到數據庫中。 但是我的下一個csv包含以下內容:

order_id  quantity price order_date shipping_date
2         120      2.00  2016-10-8  2016-10-10

必須添加新行。 沒問題,我的查詢很好。 但是具有order_id 1的行在csv消失了。 該行必須從數據庫中刪除。 我怎樣才能做到這一點? 這可能與我的查詢有關嗎? 還是我需要另一個?

您將需要添加一個字段來存儲更新的“版本”。

ALTER  TABLE test_table ADD version BIGINT DEFAULT 0;

在執行INSERT之前,在PHP中分配$ vers = time()。 舊行將包含小於當前版本號的版本值。

在查詢的INSERT和ON DUPLICATE部分中更改SQL以更新version字段。

INSERT INTO test_table (`id`,`order_id`,`quantity`,`price`,`order_date`,`shipping_date`,`version`)
                    VALUES ('$orderId', '$quantity', '$price', '$orderDate', '$shippingDate','$vers')
                    ON DUPLICATE KEY UPDATE `order_date` = '$orderDate', `shipping_date` = '$shippingDate', `version` = $vers"

做進口。

然后,在導入完成后,刪除舊數據

DELETE FROM test_table WHERE version < $vers

應該做到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM