0

以下は私のCSVファイルのサンプルです。

名前| 米ドル
------------
イフォネ| 500
Ufone | 600

phpスクリプトが最初の行を読み取り、(方法)上記の例のように返される最初の行の要素に従ってテーブルを作成するcsvファイルを読みたいのですが、行の要素は次のようになりますName and USD

Create table csv
{
$column1 varchar (50)
$column2 varchar (50)
}

次に、(方法)2行目以降の要素を作成したテーブルに格納します。そのための適切な方法を教えてください。

ありがとう、

csvファイルからデータを取得するために使用した次の関数:

$row = 1;
if (($handle = fopen("mycsv.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
4

1 に答える 1

2

より良いアプローチは次のとおりです。

1)CSVテーブルの形式を調べて、フィールドの名前とタイプを決定します。

fonemodel varchar(50);
cost      integer;      -- or a monetary field

2)上記のフィールドから手動でテーブルを作成します

CREATE TABLE fones ...

3)ファイルを直接インポートします。

LOAD DATA LOCAL INFILE '/path/to/mycsv.csv'
INTO TABLE fones
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES

終端とエンクロージャーはCSV構造によって異なります(提供したサンプルは実際にはパイプで区切られています)。

2つのテーブルを保存したら、適切なデータ型間の比較を実行できます(問題が発生した可能性があります。文字「5」は「6」の前にあるvarcharため、599は60未満と見なされる可能性があります)。

アップデート

実際のCSVが次のようなものであると仮定します

 UFone,500,useless data,1234,other useless info,blah blah

モデル、コスト、在庫、つまり列1、2、4のみが必要です。次に、入力を次のように指定します。

 ...INTO TABLE fones (model, cost, @ignore, stock, @ignore, @ignore)...

単にの代わりにINTO TABLE

MySQLのマニュアルページで詳細を確認してください。

于 2012-11-15T17:12:47.687 に答える