Как избежать дублирования результатов при импорте из RSS - PullRequest
0 голосов
/ 29 марта 2019

Я импортирую данные из RSS в mysql, используя core php, каждые x часов, но я борюсь с дублирующимися записями.

$rss_url = 'https://promograd.bg/feed/agg/common.xml?a=143';
    $xml = simplexml_load_file($rss_url);
    foreach($xml->ITEM as $item) {
        $title = mysqli_real_escape_string($link, $item->TITLE);
        $offerUrl = $item->URL;
        $description = mysqli_real_escape_string($link, $item->DESCRIPTION);
        $offerTerms = mysqli_real_escape_string($link, $item->TERMS);
        $originalPrice = $item->ORIGINAL_PRICE;
        $finalPrice = $item->FINAL_PRICE;
        $offerDiscount = $item->DISCOUNT;
        $offerSales = $item->SALES;
        $offerEnds = $item->DEAL_END;
        $lat_coordinates = $item->LAT;
        $lng_coordinates = $item->LNG;
        $city = mysqli_real_escape_string($link, $item->CITY);
        $category = mysqli_real_escape_string($link, $item->CATEGORY);

        $img = $item->IMAGE;

        $query = mysqli_query($link, "
        INSERT INTO......       
        }

Моя проблема в том, что когда я запускаю этот скрипт, он импортируетте же результаты, но не так много нового. Как я могу избежать дублирования результатов?

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Например, если вы проверяете заголовок на дубликат, вы можете попробовать это: -

$rss_url = 'https://promograd.bg/feed/agg/common.xml?a=143';
$xml = simplexml_load_file($rss_url);
$tempRecords = array(); // temp array store titles
foreach($xml->ITEM as $item) {
    $title = mysqli_real_escape_string($link, $item->TITLE);
    if(in_array($title, $tempRecords)){ //skip if exists
        continue;
    }else{ // else insert
        //$title = mysqli_real_escape_string($link, $item->TITLE);
        $tempRecords[] = $title; //assign to temp array

        $offerUrl = $item->URL;
        $description = mysqli_real_escape_string($link, $item->DESCRIPTION);
        $offerTerms = mysqli_real_escape_string($link, $item->TERMS);
        $originalPrice = $item->ORIGINAL_PRICE;
        $finalPrice = $item->FINAL_PRICE;
        $offerDiscount = $item->DISCOUNT;
        $offerSales = $item->SALES;
        $offerEnds = $item->DEAL_END;
        $lat_coordinates = $item->LAT;
        $lng_coordinates = $item->LNG;
        $city = mysqli_real_escape_string($link, $item->CITY);
        $category = mysqli_real_escape_string($link, $item->CATEGORY);

        $img = $item->IMAGE;

        $query = mysqli_query($link, "
        INSERT INTO......  
    }

    }

Вы также можете сделать это с помощью запроса mysql, перейдите по ссылке

https://ypereirareis.github.io/blog/2016/03/22/mysql-insert-ignore-alternatives/
0 голосов
/ 29 марта 2019

Поместите уникальный ключ в таблицу для столбца, который вы не хотите дублировать.Или вы можете поставить уникальный ключ на несколько столбцов, например, сочетание заголовка и URL.

Теперь в инертном запросе

используйте insert ignore, чтобы избежать вставки повторяющихся записей

илииспользуйте on duplicate key update для обновления некоторых полей при обнаружении дублирующейся записи.например, если вы хотите обновить новую цену для той же существующей записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...