【问题标题】:Update DB without creating duplicates更新数据库而不创建重复项
【发布时间】:2012-03-30 05:16:07
【问题描述】:

我正在尝试从 Yahoo SQL API 检索 RSS 提要并通过 PHP 将其存储在文件中。代码如下:

if( filemtime($cache) < (time() - 10800) ) {

   if ( !file_exists(dirname(__FILE__) . '/cache') ) {
      mkdir(dirname(__FILE__) . '/cache', 0777);
   }

   $path = "http://query.yahooapis.com/v1/public/yql?q=";
   $path .= urlencode("SELECT * FROM feed WHERE url='http://url'");
   $path .= "&format=json";

   $feed = file_get_contents($path, true);

   if ( is_object($feed) && $feed->query->count ) {
      $cachefile = fopen($cache, 'wb');
      fwrite($cachefile, $feed);
      fclose($cachefile);
   }
}
else {
   $feed = file_get_contents($cache);
}

问题是。现在我想将结果存储在数据库中。但是因为,我将它存储在文件中并在 3 小时内更新它,我确信我会遇到重复的 RSS 条目。而且我不想将这些重复项存储在数据库中。

是否有一些有效的方法来完成这项工作?

【问题讨论】:

  • 这和 JavaScript 有什么关系?
  • 我认为 file_get_contents 不会返回对象...

标签: php javascript mysql


【解决方案1】:

或者您在 url 上添加唯一索引,这样如果 url 已经存在,则不会添加插入。

您可以使用 INSERT INGORE INTO ... 忽略 mysql 给您的错误 ...

【讨论】:

【解决方案2】:

检查 RSS 条目是否存在,如果存在 - 不要插入,否则插入新的 rss 条目。

【讨论】:

  • 这将涉及搜索所有条目的大量开销。我的意思是,一旦条目数量增加,这将不是一个好技术。
  • 在文件/数据库上添加时间戳并过滤现在和现在之间的时间() - 3小时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 2012-02-04
  • 1970-01-01
  • 2014-05-18
  • 2017-10-24
  • 2014-08-18
  • 1970-01-01
相关资源
最近更新 更多