Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从RSS导入时如何避免重复结果_Php_Mysql_Rss - Fatal编程技术网

Php 从RSS导入时如何避免重复结果

Php 从RSS导入时如何避免重复结果,php,mysql,rss,Php,Mysql,Rss,我正在使用核心php将数据从RSS导入mysql,每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->TI

我正在使用核心php将数据从RSS导入mysql,每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......       
        }

我的问题是,当我运行此脚本时,它将导入相同的结果,但没有太多新结果。。如何避免重复结果?

例如,如果要检查标题是否重复,可以尝试以下方法:-

$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/

为不希望复制的列在表上放置唯一键。或者,您也可以在多个列上放置唯一键,如标题和url的组合

现在进入惰性查询

使用insert ignore可避免插入重复条目


或者在发现重复条目时,使用“重复密钥更新”更新某些字段。例如,如果您想为相同的现有记录更新新价格。

使用“链接上插入忽略”,因为链接将始终是唯一的。您想检查哪个节点的重复项?@RakeshJakhar title例如,不要检查重复项的标题。多篇文章的标题可以相同。但是帖子的链接总是唯一的,检查重复的逻辑在哪里?您是否在数据库中使用索引?