2012-03-29 10 views
1

Yahoo SQL APIからRSSフィードを取得し、PHP経由でファイルに保存しようとしています。コードは次のとおりです。重複を作成せずにDBを更新する

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エントリを複製するために実行することを確信しています。私はそれらの複製をDBに保存したくありません。

これを達成するための効率的なアプローチはありますか?

+0

... INSERT INTOの違いを無視を使って、あなたを与えますか? – rekire

+0

私はfile_get_contentsがオブジェクトを返すとは思わない... – ajreal

答えて

3

または、URLに一意索引を追加すると、URLがすでに存在する場合は挿入されません。

あなたはエラーmysqlの違いを無視することができますが、これはJavaScriptを使用して関連してどのように

+0

YEP、INSERT IGNORE INTO tbl_name ...あなたの友人はhttp://dev.mysql.com/doc/refmanです。 /5.5/en/insert.html – Sergi

+0

+1このアイデア – Stefan

1

RSSエントリが存在するかどうかを確認します。挿入しない場合は、新しいRSSエントリを挿入します。

+0

これはすべてのエントリを検索する大きなオーバーヘッドを伴うだろう。エントリの数が増えたら、それは良いテクニックではありません。 – amit

+1

ファイル/データベースにタイムスタンプを追加し、NOWとNOW()の間の時間をフィルタリングします。 - 3時間 –

関連する問題