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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从RSS导入时如何避免重复结果相关的知识,希望对你有一定的参考价值。

我每隔x小时使用核心php将数据从RSS导入mysql,但我正在努力处理重复的条目。

$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/
另一答案

在表上放置一个唯一的键,用于您不想复制的列。或者您可以将唯一键放在多个列上,例如标题和网址的组合。

现在在插入查询中

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

或者在找到重复条目时使用on duplicate key update更新某些字段。就像你想要更新同一现有记录的新价格一样。

以上是关于从RSS导入时如何避免重复结果的主要内容,如果未能解决你的问题,请参考以下文章

从选项卡式片段导航时,如何避免聚焦最后一个 EditText?

PHP Laravel:如何在将 xl/csv 导入 mysql 时避免重复数据?

需要一种有效的方法来避免使用 Laravel 5 重复代码片段

使用导航架构操作点击返回按钮时如何避免片段重新创建?

如何从片段 KOTLIN 中调用意图 [重复]

导入使用mixins的less文件时可以避免重复的css吗?