【发布时间】:2011-07-16 05:33:53
【问题描述】:
我有一个包含库存的 XML 文件,大约有 20,000 件物品。记录有 SKU 和 itemid。我想搜索 XML 文件并找到重复的 SKU。
XML 看起来像这样
<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>
我编写了以下 PHP 代码来处理这个文件。大约需要 500 秒。 我浏览了 xml 文件中的每个节点,并将一条记录添加到 sku 和 itemid 的数据库中。如果 sku 已经存在于数据库中,我会添加第二个 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 插入语句等??