Я использую XMLReader для импорта продукта в мою таблицу SQL.В таблице «товары» 62419 товаров.Когда-то в первом XML-файле нет цены на продукты, но они находятся во втором файле.Поэтому я снова использую XMLReader для хранения этих цен в таблице «products_prices».Сейчас у меня 50912 предметов в этой таблице.Мне нужно решение, как обновлять цены в таблице «products» с помощью «products_prices».
Схема для таблицы «products»:
id
pxmlId
pprice
psale_price
Схема для таблицы «products_prices»:
id
pxml_id
pprice
psale_price
'pxmlId' и 'pxml_id' - это одно и то же - это продукт ID из обоих файлов .xml.
Что я пробовал:
- Первая заливка 'Затем в таблицу products_prices, когда XMLReader считывает файлы .xml для таблицы «products», я отправляю запрос в «products_prices», если существует какой-либо «pxml_id».if is then получить цены и обновить последний запрос.
Это займет много времени, и иногда я получаю '500 error'.
Что я могу сделать: 1. Получитьэлементы из «products_prices» и помещают их в большой массив тогда, когда XMLReader считывает файлы .xml для поиска «products» в этом массиве по ценам.
Объедините эти XML-файлы, используя XMLReader, но я не знаю, возможно ли это.
Это код для 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++;
}