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