我有这段代码来插入csv文件中的值。当行已存在于数据库中时,某些值会更新。我是多么想要它。
Thu Jul 21 11:24:06 CEST 2016
但是当行不在csv时,必须从数据库中删除它。 例如:
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
必须添加新行。没问题,我的查询很好。但是order_id 1的行在csv中消失了。必须从数据库中删除该行。我怎样才能做到这一点?这可能与我的查询有关吗?或者我需要另一个吗?
答案 0 :(得分:1)
您需要添加一个字段来存储更新的“版本”。
ALTER TABLE test_table ADD version BIGINT DEFAULT 0;
在执行INSERT之前,在PHP中分配$ vers = time()。 旧行将包含小于当前版本号的版本值。
更改SQL以更新查询的INSERT和ON DUPLICATE部分中的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
应该做的伎俩。