2012-01-09 28 views
0

我有一個mysql表,我跟蹤用戶的喜好。 該表由USER_ID,名稱和時間戳的保持每個用戶150最新條目

(user_ID的,名稱爲PK)

如果條目已經存在,我更新的時間戳到當前的時間現在

,什麼我想,每個用戶最近的150個條目都是活躍的。 每次用戶登錄時,我都想運行查詢來刪除任何要刪除的條目。

但是,我無法繞過刪除查詢達到類似的東西。

任何幫助?

+1

爲什麼?你爲什麼要刪除任何東西?爲什麼不選擇150個最後的條目並將它們視爲活動? – 2012-01-09 11:48:43

回答

1

我編輯了答案。我告訴你,刪除150最近,這不是你想要的..以下是如何刪除所有其他行:

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

這也行不通。 Mysql聲明你不能使用在子查詢中被刪除的表 – Thomas 2012-01-09 12:03:09

0

其次這裏基本上提到 http://helphow.info/?qa=209695/solved-mysql-delete-from-limit-x-y-would-not

黑客,我創建了一個臨時表,我想刪除所有條目,然後刪除內部連接

完美工作

+0

你確實意識到你的(可怕的)邏輯的含義? – 2012-01-09 12:37:39

+0

我相信你可以幫我解釋一下嗎? – Thomas 2012-01-09 13:02:36

+0

'現在,我想要的是,每個用戶最近的150個條目處於活動狀態 - 您通過選擇最後150條記錄來實現這一點。您不會刪除內容以激活150條記錄。這在邏輯上是不好的方法。您使用數據庫存儲數據,並使用關係獲得您感興趣的數據。在數據庫級別實現邏輯(在滿足某些條件時刪除記錄)始終是不好的。數據庫旨在保存和操作數據,而不是做出合乎邏輯的決定。然而,這是你的代碼和你的分貝,所以你可以自由地做任何你喜歡的事情。 – 2012-01-09 13:12:56