2012-09-17 52 views
2

首先,如果已回答此问题,我表示歉意。我见过很多类似的问题,但没有一个能够回答我的问题。使用CSV文件中的数据更新SQL数据库中的字段

首先,我是最好的SQL新手。自建立我的网上商店以来,我学到了很多东西,但我仍然对其中的很多知识缺乏了解。

好的,我在我的网络服务器上为我的在线商店提供了一个数据库。我卖的东西也可以下架。我可以每隔几分钟从我的分销商处以CSV格式下载更新的库存文件。该文件包含两列在第一行中没有字段名称。我想要更新的表是zen_products。 CSV文件中的第一列对应于products_model列,并且是唯一的。 CSV文件中的第二列对应于列products_quantity。 CSV文件中将存在SQL表中不存在的记录。我不想创造新的记录;我只想使用CSV文件中的值更新products_quantity列。

好吧,现在我可以通过我的购物车软件的管理部分使用附加组件来完成此操作,但是我必须编辑CSV文件才能输入特定的字段名称。这不是问题,因为它非常容易,但编辑文件,登录,上载和处理文件需要几分钟的时间。其实很简单;但是我想找到一种方法来完全自动化这个过程,所以如果可能的话,我可以每15-30分钟完成一次。正如您可以进行成像一样,需要5分钟的时间没有问题,但是如果每15分钟需要5分钟,那么整个一天都需要很长时间。即使在我忙碌或离开的时候,也能够让它发生,这将是一件好事。

如果有必要,我也愿意支付一个合理的金额用于工作,完全自动化的解决方案。此外,CSV文件只能通过FTP访问。而FYI我使用Zen Cart作为我的购物车。

任何帮助将不胜感激。谢谢。

更新:基于从JKirchartz(感谢你,你的方式岩),我有这个这似乎每次工作的帮助下,我运行它:

DELETE FROM zen_temp; 

load data local infile '/home/somedude/public_html/somefolder/somefile.csv' into table zen_temp 
fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n' 
(products_model, products_quantity); 

UPDATE zen_products SET `products_quantity` = (SELECT products_quantity FROM zen_temp WHERE zen_products.products_model = zen_temp.products_model) 
WHERE EXISTS (SELECT products_model FROM zen_temp WHERE zen_products.products_model = zen_temp.products_model); 

现在的问题是,我怎么能把这个变成我可以用很少的输入轻松完成的事情?有没有办法让我可以安排它或从任何地方轻松运行它?再次感谢。

+0

您正在使用哪些DBMS? PostgreSQL的?甲骨文? DB2? –

+0

不知道这是什么意思,但我认为你的问题的答案是phpmyadmin – user1678042

+0

phpmyadmin是一个前端工具,而不是DBMS。它是一个用于MySQL的工具 –

回答

1

您可以导入CSV的直接:

load data local infile 'uniq.csv' into table tblUniq fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n' 
(uniqName, uniqCity, uniqComments) 

更新,你必须LOAD DATA LOCAL INFILE到另一个表中,然后使用存储过程或查询INSERTUPDATE(相对于REPLACE)所需表

+0

啊,我现在看到关于首先加载到另一个表。我猜你看到我的评论之前,我删除它(这里还是新的,对不起)。那么,这一切可以一次完成吗?我可以通过我的自动ftp程序确保csv文件始终是最新的。有一种方法可以让我们创建新表,然后更新旧表,然后从“新”表中删除记录,以便进行下一次更新。 – user1678042

+0

非常感谢您的帮助。我得到它的工作,现在我只需要一种方法来实现它的自动化。 – user1678042