2016-09-28 4 views
1

私はまた、私はCVSのようなファイルをこのインポート複数のCSVフィールドを

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

のようなテーブルを持っている

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

彼らは「」で区切って(または何か他のもの)されています csvには100列があります。

私は2番目の列を1002番目の列をmysql "number2"に、 番目の列をmysql "number1"に結合したいと考えています。このような

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

だから私はテーブルにファイルをロードするためには、LOAD DATA INFILEを使用することができますか?これどうやってするの..?または他の方法がありますか?

ありがとうございました。ここで

答えて

1

は100を介して列2を組み合わせ新しい列を作成するオプションです:

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の中から100を介して列2を削除することができます

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

この方法が複雑すぎる、ビルドでなければなりませんが99列。しかし、ありがとう。 – user3804623

+0

この方法がなぜ概念的に難しいのかわかりません。 AFAIKでは、集計して削除するときに列に言及するのを避けることはできません。実装には5分かかるかもしれません。 –

+0

ありがとうございます。私は問題があります。 csvでは、いくつかの列はnullです。これらの列を避ける方法は「連結」です。 数値の列のみがマージされます。 – 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)"; 
} 
関連する問題