2012-01-09 5 views
0

私はユーザーの設定を追跡するmysqlテーブルを持っています。 表は何、エントリが既に存在する場合、私は現在の時間今ユーザーごとに最新のエントリを保持する

にタイムスタンプを更新

(USER_ID、名前がPKで)USER_ID、名前とタイムスタンプ

で構成されてい私は、ユーザーあたりの最新の150エントリがアクティブであることを望んでいます。 ユーザーがログインするたびに、削除するエントリを削除するクエリを実行します。

しかし、私はそのような何かを達成する削除クエリの周りに私の頭を得ることはできません。

助けが必要ですか?

+1

なぜですか?なぜあなたは何かを削除しますか?なぜ最後の150個のエントリを選択し、それらをアクティブとして扱うのはなぜですか? –

答えて

1

私は答えを編集しました。私はここで他のすべての行を削除する方法です...それはあなたが望むものではありません、150最新のを削除するために、あなたを言っていた:

DELETE FROM preferences WHERE user_id NOT IN (SELECT user_id FROM preferences ORDER BY timestamp DESC LIMIT 150) 
+0

これも機能しません。 Mysqlは、サブクエリで削除されるテーブルを使用できないと述べています – Thomas

0

は基本的にここに http://helphow.info/?qa=209695/solved-mysql-delete-from-limit-x-y-would-not

を述べたハックを踏襲し、私は一時を作成しましたテーブル内のすべてのエントリを削除してから、内部結合で削除を行いました

完全に作業しました

+0

あなたの(ひどい)ロジックの意味を理解していますか? –

+0

あなたは私にそれを説明できると確信していますか? – Thomas

+0

'今、私が望むのは、ユーザーあたり150件の最新のエントリをアクティブにすることです - 最後の150レコードを選択することで達成できます。あなたは150レコードをアクティブにするために物を削除しません。それはロジックの悪いアプローチです。データベースを使用してデータを格納し、関係を使用して、関心のあるデータを取得します。データベースレベルでロジックを実装する(特定の条件が満たされたときにレコードを削除する)ことは常に悪いことです。データベースは、データを保持し操作するためのものであり、論理的な決定をするものではありません。しかし、それはあなたのコードとあなたのデータベースなので、好きなことを自由にすることができます。 –

関連する問題