我有一個多對多的關係表,我需要刪除不需要的行。 的lastviews
表的結構爲:從2個條件的表中刪除不需要的行
| user (int) | document (int) | time (datetime) |
該表記錄其查看的文檔的最後一個用戶。 (用戶,文檔)是唯一的。我只顯示最後10次的文檔的直到現在我刪除不需要這樣的:
DELETE FROM `lastviews` WHERE `document` = ? AND `user` NOT IN (SELECT * FROM (SELECT `user` FROM `lastviews` WHERE `document` = ? ORDER BY `time` DESC LIMIT 10) AS TAB)
不過,現在我還需要顯示最後5記錄了用戶已經觀看。這意味着我不能再使用先前的查詢刪除行,因爲它可能會刪除我需要的信息(比如說用戶在5分鐘內沒有查看文檔並且行被刪除)
總之,我需要刪除所有不在這2個查詢結果的記錄:
SELECT ... FROM `lastviews` WHERE `document` = ? ORDER BY `time` DESC LIMIT 10
和
SELECT * FROM `lastviews` WHERE `user` = ? ORDER BY `time` DESC LIMIT 0, 5
我所需要的邏輯。
當然,我總是可以創建一個具有相同結構的第二張桌子,但這只是感覺不對。 – stormbreaker 2011-01-05 20:49:14
這絕對是創建臨時表的一種情況。 :) – Riedsio 2011-01-05 23:36:21
這帶來了如何在臨時表中插入行而不必爲每個'document'和'user'執行INSERT語句(獲取最後10行或5行)的問題。或者至少讓查詢做循環。 – stormbreaker 2011-01-06 06:35:08