2016-09-28 50 views
1

我有一個表像這樣導入多個CSV字段到一個MySQL的領域

mytable(`id` int, 'number1' varchar(11), 'number2' varchar(1200)) 

我也有類似CVS文件

111111111,222222222,333333333,44444444,,, 
222222222,333333333, 
111111111,555555555,666666666, 

他們被「」分隔(或別的東西) csv有100個柱子。

我想將第二列第100列結合成mysql「number2」,第 列第一列mysql「number1」。

這樣的:

id number1 number 2 
1 111111111 222222222,333333333,44444444 
2 222222222 333333333 
3 111111111 555555555,666666666 

所以我可以使用LOAD DATA INFILE將文件加載到表?我怎樣才能做到這一點..?或有其他方法?

謝謝。

回答

1

這裏是一個創建2至100 列合併列一個選項:

LOAD DATA INFILE 'input.csv' 
INTO TABLE myTable 
COLUMNS TERMINATED BY ',' 
IGNORE 1 LINES 
(id, number1, number2, ..., number99) 
SET newCol = CONCAT(NULLIF(number1, ''), NULLIF(number2, ''), ..., NULLIF(number99, '')); 

然後,你可以從MySQL中刪除列2到100:

ALTER TABLE myTable 
DROP COLUMN number1, 
DROP COLUMN number2, 
... 
DROP COLUMN number99 
+0

這種方法太複雜,必須建立99列。但是謝謝。 – user3804623

+0

我不明白爲什麼這種方法在概念上是困難的。 AFAIK在聚合然後刪除時不會避免提及列。應該花5分鐘的時間來實施。 –

+0

非常感謝。我有個問題。在csv中,一些列爲空,「concat」如何避免這些列。 僅合併具有數值的列。 – user3804623

0

可以使用函數file()打開cvs文件;

使用功能explode(',', $each_line)到單獨與,每一行,

我沒有清楚地瞭解你的需求,我想簡單的代碼可能是這樣的:

$file_items = file('file.cvs'); 
foreach($file_items as $item) { 
    $item_arr = explode(',', $item); 
    // combine $item_arr[0]... $item_arr[99] ,you get $number1, $number2; 
    $sql_insert = "INSERT INTO mytable (number1, number2) VALUES(number1, $number2)"; 
} 
相關問題