-2
$handle = fopen("stock.csv", "r");

while (($data = fgetcsv($handle, 1000, ";")) !== false) {
    $model = mysql_real_escape_string ($data[0]);
    $quantity = mysql_real_escape_string ($data[7]);
mysql_select_db("verradt33_xoho", $link);

$quantity = str_replace("JA", "10", $quantity);
$quantity = str_replace("NEE", "0", $quantity);

$result = mysql_query("UPDATE dev_product 
    SET quantity = $quantity
    WHERE model = '$model'")
or die(mysql_error());

コードが機能しても、CSV の 7000 行以上を処理するには長い時間がかかります。JA または NEE を 1 行ごとに 10 または 0 に置き換える必要があるためです。

これをより速くする方法はありますか?もちろん、それは難しい部分です.csvファイルに触れることはできません。

現在のロード時間は 40 分です。

4

3 に答える 3

1

最初の質問は次のとおりです。列はmodelインデックス付けされていますか?

次に、データベース アクセスをコメント アウトして、.csv 処理だけにかかる時間を確認してください。

mysql_select_db("verradt33_xoho", $link);
$handle = fopen("stock.csv", "r");

while (($data = fgetcsv($handle, 1000, ";")) !== false) {
    $model = mysql_real_escape_string ($data[0]);
    $quantity = mysql_real_escape_string ($data[7]);

    $quantity = str_replace("JA", "10", $quantity);
    $quantity = str_replace("NEE", "0", $quantity);
    /*
    $result = mysql_query("UPDATE dev_product 
                           SET quantity = $quantity
                           WHERE model = '$model'")  or  die(mysql_error());
    */
}

それが数秒で終了する場合、速度の問題を引き起こしているのは間違いなくあなたのデータベースアクセスです。

提案: 変更JANEEているように見えるのは数字だけなので、シンプルにしてください

mysql_select_db("verradt33_xoho", $link);
$handle = fopen("stock.csv", "r");

while (($data = fgetcsv($handle, 1000, ";")) !== false) {
    $model = mysql_real_escape_string ($data[0]);
    $quantity = mysql_real_escape_string ($data[7]);

    switch ($quantity) {
        case 'JA'     : $quantity = 10; break;
        case 'NEE'    : $quantity = 0;  break;
    }

    $result = mysql_query("UPDATE dev_product 
                           SET quantity = $quantity
                           WHERE model = '$model'")  or  die(mysql_error());

}

ただし、すぐに高速化するための最善の方法は、model列にインデックスを付けることです。

于 2013-08-23T15:00:30.883 に答える