我有一个产品的CSV文件,如果存在,则需要添加或更新,即使已从列表中删除它,也要保留旧的文件。

我有这样一个循环:

while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)


这很好用,从中我分配了几个这样的变量:

$price = htmlspecialchars(mysql_real_escape_string($data[2]), ENT_QUOTES, 'utf-8' );


设置完所需的4个变量后,我将像这样查询MySQL:

mysql_query("SELECT * FROM products WHERE productid = '$prodid' AND supplier = 'SUPPLIER1'")


如果结果为1或更多,我们将对其进行更新

            mysql_query("UPDATE tuotteet SET
                        supplier = 'SUPPLIER1',
                        product = '$product',
                        prodid = '$prodid',
                        ean = '$ean',
                        price = '$price' WHERE prodid= '$prodid' AND supplier = 'SUPPLIER1'") or die(mysql_error());


如果从数据库中找不到产品,我们将再次查询INSERT。问题在于,这是一种非常缓慢的方法,要花费大约几分钟才能完成大约10000条生产线。

有什么关系吗?

最佳答案

在开始该过程之前,我将在数据库中查询数据库中所有product_id,然后将它们存储在字典中。
然后,开始处理csv文件。
对于每条记录,只需询问字典是否具有当前product_id的键。

这样,您就不必为在csv中拥有的每条记录都去数据库。

10-07 13:20
查看更多