私は、約20,000アイテムのインベントリを含むXMLファイルを持っています。レコードにはSKUとitemidがあります。私は、XMLファイルを検索し、重複するSKUを見つけたいと思います。XMLファイルの重複レコードを検索するためのコードの最適化
XMLは、私は、このファイルを処理するには、次のPHPコードを書いたこの
<SKUDetails>
<SKU>AAAAA</SKU>
<Price currencyID="USD">10</Price>
<Quantity>4</Quantity>
<ItemID>11111111</ItemID>
</SKUDetails>
<SKUDetails>
<SKU>BBBBB</SKU>
<Price currencyID="USD">10</Price>
<Quantity>10</Quantity>
<ItemID>2222222</ItemID>
</SKUDetails>
のように見えます。約500秒かかります。 xmlファイルの各ノードを調べ、skuとitemidのレコードをデータベースに追加します。 skuがすでにデータベースに存在する場合は、2番目のitemidを追加します。
これを最適化する方法はありますか、これを行う別の方法がありますか?
は、ここでは、コード
$doc = new DOMDocument;
$doc->load('../_result/'.$_GET["file"].'.xml');
$xpath = new DOMXPath($doc);
$query = "//SKUDetails";
$SKUDetailsNodes = $xpath->query($query);
echo("Total SKUs ".$SKUDetailsNodes->length."<br />\n");
if($SKUDetailsNodes->length > 0) {
foreach ($SKUDetailsNodes as $node) {
$query = "//ItemID";
$ItemIDNodes = $xpath->query($query,$node);
$ItemID = $ItemIDNodes->item(0)->nodeValue;
$query = "//SKU";
$SKUNodes = $xpath->query($query,$node);
$SKU = $SKUNodes->item(0)->nodeValue;
if($SKU != '') {
$insert_query = "IF NOT EXISTS ".
"(SELECT * FROM dump_inventory WHERE (sku = '$SKU')) ".
"INSERT INTO dump_inventory (sku,item1) VALUES ('$SKU',$ItemID) ".
"ELSE ".
"UPDATE dump_inventory SET item2 = $ItemID WHERE sku = '$SKU'";
if(!$insert_exec = sqlsrv_query($conn,$insert_query)) {
print_r(sqlsrv_errors());
}
}
}
あなたの目標は何ですか? SKUとItemIDの一意のレコードセットをデータベーステーブルに挿入することはあなたの目標ですか?または、重複除外を行うためにデータベースを使用しているだけですが、最終的にはHTMLレポート、XMLファイル、SQL挿入文などを生成することですか? –