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