2012-01-25 7 views
0

私はCSVファイルに多数のレコードを持っています。レコードをグループに分割しますか?

私は複数の挿入を単一のクエリに実装しようとしていますが、私は合計レコードのベースが必要な単一のクエリの数を試してみる必要があります。例えば

$totalRecord = 1620; 

だから私は17個のクエリを必要とします。 16クエリは100レコードを挿入し、17クエリは20レコードを持ちます。

$totalRecordの数は、これをうまくする方法500,00

から1の間に何もすることができますか?

例:

Query 1: 
INSERT INTO [table] 
([field1], [field2], [field3]) VALUES 
('[value1.1]', '[value1.2]', '[value1.3]'), 
('[value2.1]', '[value2.2]', '[value2.3]'), 
('[value3.1]', '[value3.2]', '[value3.3]'), 

Query 2: 
INSERT INTO [table] 
([field1], [field2], [field3]) VALUES 
('[value1.1]', '[value1.2]', '[value1.3]'), 
('[value2.1]', '[value2.2]', '[value2.3]'), 
('[value3.1]', '[value3.2]', '[value3.3]'), 
+0

これは一回限りの操作ですか、それとも頻繁にやっていますか?一回限りの場合は、CSVから直接データベースにインポートする方がはるかに優れています。コードでは、fgetcsv()を使用してループに挿入する方が簡単です。 –

+0

@Michael毎週1回好きなことがよくあります。これは私が 'fgetcsv()'を実行してループに挿入するものですが、100,000を超えるレコードは遅すぎます。だから私は、複数の挿入クエリをグループ化する必要があります。私は必要なグループ数をどのように計算するのですか? –

+0

多分準備文について読んでいますか?リンク - > http://php.net/manual/en/pdo.prepared-statements.php – Tudor

答えて

2

使用率や部門:あなたの最後のセットにあるどのように多くの挿入を見つけるためにあなたのグループの数とモジュラス演算子を見つけるため

$recordsineachquery = 100; 
$recordsinlastquery = $totalrecords % $recordsineachquery; 
$fullqueries = ($totalrecords - $recordsinlastquery)/$recordsineachquery; 
$totalqueries = $fullqueries + 1; 
+0

+1、良いものを読んでください。 – davidethell

0

使用整数の除算:

// You have to round the division result because PHP doesn't do integer division. 
$numGroups = (int)($totalRecords/100); 
$remainder = $totalRecords % 100; 
0

$batchProcessLimit = 100; 
$batchStep = 0; 

$query = "INSERT INTO [table] ([field1], [field2], [field3]) VALUES "; 

foreach($rows as $row) 
{ 
    $query .= "('[value1.1]', '[value1.2]', '[value1.3]')" 

    if ($batchProcessLimit % ++$batchStep != 0) $query .= ","; 
    else 
    { 
     // execute the query 

     $query = "INSERT INTO [table] ([field1], [field2], [field3]) VALUES "; 
    } 
} 

// execute the query for remaining rows 
関連する問題