2011-02-04 11 views
1

ちょっと私の問題を説明しましょう。私は5つの異なるサイトからのデータフィードを格納するmysqlテーブルを持っています。今私は毎日1回フィードを更新します。私はこのプライマリキーFeedIdを自動的にインクリメントします。今私が行うのは、特定のサイトからのフィードを更新して、そのサイトの以前のデータをテーブルから削除し、新しいものを入力するときです。このようにして、以前の削除されたデータが占める行に新しいデータが書き込まれます。この時間がある場合は、残りのフィードが表の最後に入力されます。しかし、FeedIdはすべての新しいデータに対してインクリメントされます。 私が欲しいのは、古い場所に保存されたフィードは、前のIDを保持しています。最後に保存された余分なものだけが、新しい増分IDを取得します。私はそれを行う方法を理解することができないように助けてください。再利用自動インクリメントのないmysqlテーブルの行

+6

6つの質問に対するゼロ受け入れは助けになるインセンティブではありません。 –

答えて

0

投稿にコメントに基づいて削除をマークする データをマージするには、REPLACE INTOを試してください。 詳細については、@:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

+0

'REPLACE'は悪いので避けるべきです。彼らはそれを実現せずに、あなたの外来のキーの関係(カスケード削除)をすべて素早く処理する方法です。 – ircmaxell

+0

@ircmaxell:情報のためのThx。私はそれを知らなかった... – Chandu

+1

REPLACEは基本的にDELETE + INSERTなので、とにかくAUTO_INCREMENTを増やすと思います。 – Mchl

3

は、よりよい解決策は、(脇自動インクリメントのキーから)フィードに一意のキーを設定することです。そして、利益はあなたがIDをインクリメントしていない、とあなたはまだ1つの原子のクエリでそれをやっているということですINSERT ON DUPLICATE KEY UPDATE

INSERT INTO feeds (name, url, etc, etc2, `update_count`) 
    VALUES ('name', 'url', 'etc', 'etc2', 1) 
    ON DUPLICATE KEY UPDATE 
     `etc` = VALUES(`etc`), 
     `etc2` = VALUES(`etc2`), 
     `update_count` = `update_count` + 1; 

を使用しています。さらに、変更する必要があるものだけを更新/変更しています。 (update_countフィールドを更新してフィールドを更新する方法を示しています)。

関連する問題