PHP / SQL / XMLReader-使用另一个更新大表

时间:2018-11-23 02:53:19

标签: php mysql zend-framework xmlreader

我正在使用XMLReader将产品导入到我的SQL表中。 “产品”表中有62419个项目。有时在第一个.xml文件中没有产品的价格,但产品在第二个文件中。因此,即时通讯再次使用XMLReader将此价格存储在“ products_prices”表中。现在,我在此表中获得了50912个项目。我需要解决方案,如何使用“ products_prices”更新“ products”表中的价格。

“产品”表的架构:

id
pxmlId
pprice
psale_price

“ products_prices”表的架构:

id
pxml_id
pprice
psale_price

“ pxmlId”和“ pxml_id”相同-这是两个.xml文件的ID产品。

我尝试过的事情:

  1. 首先填充“ products_prices”表,然后当XMLReader读取“ products”表的.xml文件时,如果有任何“ pxml_id”,则将查询发送到“ products_prices”。如果是,则获取价格并更新上一个查询。

这花了很长时间,有时我会收到“ 500错误”。

我认为我能做的: 1.从“ products_prices”中获取商品并将其放入大数组,然后当XMLReader读取.xml文件以查找“ products”时,在此数组中搜索价格。

  1. 使用XMLReader合并此.xml文件,但如果可能,我不这样做。

这是XMLReader的代码:

    $reader = new XMLReader();
    $reader->open($wpis->feed);

    while($reader->read() && $reader->name != 'item' && $reader->name != 'entry'){;}

    $i = 0;
    $e = 0;
    while($reader->name === 'item')
    {
        $parent = $reader->expand();
        $price = $parent->getElementsByTagName('price')->item(0)->nodeValue;
        $description = $parent->getElementsByTagName('description')->item(0)->nodeValue;
        $title = $parent->getElementsByTagName('title')->item(0)->nodeValue;
        $sale_price = $parent->getElementsByTagName('sale_price')->item(0)->nodeValue;
        $gtin = $parent->getElementsByTagName('gtin')->item(0)->nodeValue;
        $availability = $parent->getElementsByTagName('availability')->item(0)->nodeValue;
        $link = $parent->getElementsByTagName('link')->item(0)->nodeValue;
        $condition = $parent->getElementsByTagName('condition')->item(0)->nodeValue;
        $image_link = $parent->getElementsByTagName('image_link')->item(0)->nodeValue;
        $brand = $parent->getElementsByTagName('brand')->item(0)->nodeValue;
        $pxmlId = $parent->getElementsByTagName('id')->item(0)->nodeValue;

        $clean_price = preg_replace('/[^.0-9]/', '', $price);
        $sale_clean_price = preg_replace('/[^.0-9]/', '', $sale_price);

        if($gtin){
            $gtins = $gtin;
        } else {
            $gtins = 'nogtin';
        }

        $data = array(
            'ptitle' => trim($title),
            'pdesc' => $description,
            'pprice' => $clean_price,
            'psale_price' => $sale_clean_price,
            'pgtin' => $gtins,
            'pavailability' => $availability,
            'plink' => $link,
            'pcondition' => $condition,
            'pimage' => $image_link,
            'pbrand' => $brand,
            'pbrand_tag' => zmiana($brand),
            'pshop_currency' => $wpis->waluta,
            'pshop' => $wpis->nazwa,
            'pshop_id' => $wpis->id,
            'pxmlId' => $pxmlId
        );

        $db->insert('gmc_products', $data);
        $lastId = $db->lastInsertId();

        $reader->next('item');

        $i++;
    }

0 个答案:

没有答案