2012-05-06 6 views
0

Howdie、MySQLデータベースのユーザのための最後の500レコードのみを保存する

私は、テストに基づいてユーザに関する予測をするシステムを作成しようとしています。これの一部として、私はデータベースに最新の500の値を格納したいだけです。

私が保管しています現在のフィールドが、私はユニークユーザーがデータベースに500以上のレコードを取得するときに最も古い行を削除するには、システムをたい理想の世界では

ID (Auto increment) 
USERID (the users unique ID) 
SCORE(an integer) 

です。コードを本当に重くすることなくPHPでこれを自動化する簡単な方法はありますか?

+0

私は「何も削除しない」という考え方の学校です。なぜあなたはものを削除したいですか? _特に、あなたはmodelling_のためにそれを使用していますか?あなたのすべてのモデルは、あなたが気づかずに微妙に変化し、あなたは継続的に再要因を起こさなければなりません。何年もの間に1,000レコードを保存したいが、すべてを削除したためにできない場合はどうなるのだろうか? – Ben

+0

私はこれを2つの別々のステップで行います:(1)このデータを消費する*クエリでは、最大500レコードを考慮に入れるために 'limit'を使います。 (2)あなたは本当にしたい場合は、誰もが余分なレコードをきれいにするように頻繁にバッチを実行します。 @Benはおそらく正しいでしょう:なぜそれを削除しますか? (制限:http://dev.mysql.com/doc/refman/5.1/en/select.html#id932167) – grossvogel

答えて

1

あなたは1ヶ月以上古いですかを判断することができますので、あなたはそれはのように単純になり、日付/時刻フィールドを保存する必要があります:あなたはどんな「ギャップを持っているつもりはない場合

DELETE FROM yourtable 
WHERE timestampfield > (NOW() - INTERVAL 1 MONTH) 

「auto_incremented IDで、あなたは非常に単純な(そして非常に故障しやすい)を行うことができます:

INSERT INTO .... <--add new record 

DELETE FROM yourtable WHERE (id < (INSERT_ID() - 500)) 

が、これは非常に信頼できないだろう。

+0

これはauto_incrementのIDがすべての投稿に対して一貫しているが、ユーザーが変更する可能性があるという問題を引き起こしますか?たとえば、Chrisが20日前に追加した20のレコードを持っていて、今追加したSamが500を持っていたら、Chrisのレコードは削除されますか? 500の制限をユーザーに依存させることはできますか? –

+0

それははるかに難しく、タイムスタンプフィールドを追加して、削除クエリに '... AND(userId = 'Chris')'を追加することをお勧めします。 –

+0

私は1ヶ月使用のアイディアを落とし、一部のユーザーが休暇を過ごし、1ヶ月間システムを使用しないかもしれないので、500レコードに焦点を当てると思います。あなたが魔法500を撃った後に、レコードを数え、最も古いものを隔離する方法はわかりませんが: - –

関連する問題