2012-09-17 93 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