我有一個數據庫,其中包含CMS驅動的網站的所有內容更新。我想創建一個查詢來清除所有舊的內容,但是留下每個頁面的最近幾(5)份副本(以防萬一)。該表包含一個TIMESTAMP字段和一個PAGE ID字段,以幫助我找到正確的行。 PrimaryKey是一個名爲RevisionId的字段。當然還有其他字段(例如包含頁面內容),但它們與此問題無關。基於時間戳的MySql中的嵌套刪除
我有這樣的查詢工作的罰款:
SELECT RevisionId
FROM `content`
WHERE PageId='55'
ORDER BY Timestamp DESC LIMIT 5;
它返回我要保存五個條目。
我以爲我可以窩這樣的:
DELETE
FROM `content`
WHERE PageId='55'
AND RevisionId NOT IN (
SELECT RevisionId
FROM `content`
WHERE PageId='55'
ORDER BY Timestamp DESC LIMIT 5);
...但是,這給了我一個錯誤:
#1235 - 該版本的MySQL還不支持「LIMIT & IN/ALL/ANY/SOME子查詢」
我運行MySQL 5
問題的兩個部分:
- 我需要做些什麼來解決我到目前爲止的錯誤?
- 有沒有一種方法可以進一步自動執行此操作,以貫穿我的整個表格 ...不僅僅是PageId = '55' ,而是所有不同的PageId數字?
這是否意味着我必須跳出MySQL並使用PHP運行一系列命令來創建數據庫,然後執行刪除操作,然後刪除臨時數據庫?......這是我特別希望避免的。 – techtheatre 2011-05-23 06:31:23
@techtheatre:是不是可以從PHP運行多語句MySQL查詢? – 2011-05-23 06:50:37
這是...我只是希望我可以在一套嵌套查詢或其他東西中完成整個事情。看來,我將不得不在PHP中這樣做,這完全沒問題......我只是希望有一種更「原生」的方式來處理它。 – techtheatre 2011-05-23 07:51:44