0

1 つの列に 2000 個のデータを含む csv ファイルがあります。データ形式は次のようになります。

name 100/1
name 100/2
name 105/6 
 ...

したがって、一般的な形式は 'text integer_one/integer_two' です。これを 2 つの列を持つ mysql データベース テーブルに格納する必要があります。column_1 にはデータ integer_one が必要で、column_2 にはデータ integer_two が必要です。

php を使用してデータを mysql にプッシュするにはどうすればよいですか?

4

4 に答える 4

0

preg_matchを見てください。次のような、かなり簡単な正規表現を使用してこれらの値を取得できるはずです。

preg_match(/\w+\s*(\d+)\\\/(\d+)/, $row, $matches);

var_dump($matches);

ファイルからデータをプルするには、ファイルを1行ずつ読み取って、上記のコードの変数fgetsを取得する例を見てください。$row

次に、INSERTステートメントを使用して各行をデータベースに書き込むことができます。

考慮すべきいくつかの事柄:

ファイルの大きさはどれくらいですか?このデータを挿入する必要がある頻度はどれくらいですか?それは1回限りですか?

これらは、コードの作成方法に影響します。データを一括挿入する方法は複数あります。これが1回限りの実行である場合は、sedまたは同様の方法を使用してテキストデータを操作してから、選択したデータベースのネイティブメソッドを使用して一括挿入することをお勧めします(mysqlについてはLOAD DATA INFILE、または\.クライアントのオプションを使用)

ファイルが大きく、定期的に挿入する必要がある場合は、プリペアドステートメントの使用や複数の挿入構文を検討してください。

INSERT INTO mytable (name, number, anothernumber) VALUES('paul', 1, 2),('bob',2,1)
于 2012-11-23T13:45:44.910 に答える
0

ph関数fgetcsv関数を使用してcsvファイルを読み取り(例はこのページにあります)、それぞれをループで取得し、関数explode ()を使用して解析し、そこからクエリを作成してデータベースに保存します

于 2012-11-23T13:46:37.927 に答える
0

ファイルを処理するためにfopen()fread()またはfgetcsv() php 関数を見てください。それらを使用すると、cvs ファイルの行をループできるはずです。サーバー構成を制御できる場合は、お勧めします。ファイルをより効率的/エレガントにオブジェクト指向で処理できるため、代わりにSplFileObjectを調べてください。ただし、SPL を有効にする必要があります。次のようにファイルを読むことができるので、この最後のものは私の推奨事項です。

function random_name(){
            $file_name = "names.csv";
            if(is_readable($file_name)){
                $file = new SplFileObject($file_name);


                $file->seek($file->getSize());
                $linesTotal = $file->key();

                $file->seek(rand(1,$linesTotal-1));
                $line = $file->fgetcsv();

                return $line[4];
            }
        }

これは、1000 個の名前の cvs ファイルからランダムな名前を取得するサンプル スクリプトです。

ループしてファイル情報を取得すると、explode()を使用できます。この関数は、定義したセパレーターで文字列を区切ります。この場合は次のようになります。

$array = explode("/", $myLine);

そして、次のようにアクセスします。

$array[0] or $array[1] to get the value
于 2012-11-23T13:52:28.140 に答える
0

まず、値を抽出することから始めます。すべてのデータが例のようにフォーマットされている場合は、単純なexplode.

$lines = explode(",", $data); // $data should be your file extracted into a string
foreach ($lines as $line) {
    $temp = explode(" ", $line);
    $name = $temp[0];
    $temp_2 = explode("/", $temp[1]);
    $integer_1 = $temp_2[0];
    $integer_2 = $temp_2[1];

    $query = "INSERT INTO table_two_columns SET name = '{$name}', integer_1 = '{$integer_1}', integer_2 = '{$integer_2}'";
}

それがあなたの問題に対する私の見解です。

于 2012-11-23T13:47:31.507 に答える