2016-09-28 39 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)"; 
} 
相关问题