当结果不在csv文件中时,从表中删除行

时间:2016-07-21 10:32:33

标签: php mysql csv

我有这段代码来插入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中消失了。必须从数据库中删除该行。我怎样才能做到这一点?这可能与我的查询有关吗?或者我需要另一个吗?

1 个答案:

答案 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

应该做的伎俩。