2010-09-23 191 views
7

我有一個非常大的CSV文件(150 MB)。將其導入MySQL的最佳方式是什麼? 在將它插入到MySQL表之前,我必須在PHP中進行一些操作。使用php導入大型csv文件到mysql數據庫

+0

檢查我在http://stackoverflow.com/a/22744300/2037323解決方案,包括一些比較也 – 2014-03-30 13:08:43

回答

6

你可以看看MySQL中的LOAD DATA INFILE

一旦數據加載到MySQL中,您可能可以完成操作,而不是先讀取到PHP中。

INSERT INTO targettable (x, y, z) 
SELECT foo(x), bar(y), z 
FROM temptable 
+0

+ 1爲LOAD DATA INFILE。如果你使用phpmyadmin(顯然是PHP),你可以很容易地比較幾種最流行的方法:SELECT INTO和LOAD DATA INFILE以及它們所有不同的參數和參數。你會什麼最適合你。最有可能的是它是負載數據INFILE – 2010-09-23 07:46:01

+0

根據操作數量他必須做的數據,它可能是更可行的先讀取到PHP和一次插入一行。如果操作的數量很大,那麼無論如何都要在腳本中執行操作,然後他有兩個操作。 1.用LOAD DATA INFILE然後2.用UPDATE TABLE查詢。 – thomasmalt 2010-09-23 08:24:57

3

我只想用的fopen打開它,並使用fgetcsv讀取每個行:第一店使用LOAD DATA INFILE在臨時表中的原始數據,然後使用下面這樣的語句將數據轉換到目標表成陣列。 僞PHP如下:

mysql_connect(//connect to db); 

$filehandle = fopen("/path/to/file.csv", "r"); 
while (($data = fgetcsv($filehandle, 1000, ",")) !== FALSE) { 
    // $data is an array 
    // do your parsing here and insert into table 
} 

fclose($filehandle)