2015-10-01 19 views
-2

問題Mysql:從表中刪除其中的ID,除了行中的選擇?

我正在使用buddypress爲Wordpress它有一個私人消息在旁邊是消息線程的ID線程的表。目前,線程中可以有多少條消息沒有限制。

我想創建一個命令,刪除線程中最近10條消息以外的所有消息。下面是邏輯,但我不確定正確的語法來做到這一點?

你們中的任何一位mysql天才都知道答案嗎?

DELETE FROM TABLEA WHERE id = X與線程ID X

EXCEPT 
(SELECT * FROM TABLEA WHERE id = X ORDER BY date_sent DESC LIMIT 10) 

選擇最近10我不希望刪除的刪除所有內容。

+0

我相信TABLEA有它自己的主鍵ID和你上面提到的id實際上只是外鍵,對嗎? – sicKo

+3

請不要破壞你的帖子。通過在Stack Exchange網絡上發佈,您已授予SE無法撤銷的權利(根據[CC BY-SA 3.0許可證](https://creativecommons.org/licenses/by-sa/3.0))發佈該內容/))。通過SE政策,任何破壞行爲都將得到回覆。如果您想要解除本帖與您的帳戶的關聯,請參閱[關於解除關聯請求的正確途徑?](https://meta.stackoverflow.com/q/323395) – NobodyNada

+0

請勿損壞原始帖子。如果這個問題得到重新編輯,它將被標記爲適度問題將被鎖定,甚至你將無法重新編輯。我已將其回滾到以前的修訂版。 –

回答

1

這應該工作:

DELETE FROM TABLEA WHERE id = X AND id NOT IN (
    SELECT TOP 10 id FROM TABLEA ORDER BY date_sent DESC 
) 

子選擇這個查詢得到最後10發項目。主查詢必須刪除ID爲X的項目,但該項目位於子選擇結果之外。

+0

這個工作........... DELETE FROM'ywg_bp_messages_messages' WHERE的thread_id = 521和ID NOT IN ( SELECT ID FROM ( SELECT * FROM'ywg_bp_messages_messages' WHERE的thread_id = 521 ORDER BY DATE_SENT desc limit 10 )x ) – shakespeare

0

我不確定buddypress中的表是如何工作的,但我猜TABLEA應該在主鍵ID上有它。如果TABLEA有自己的主鍵ID,這是我的解決方案。

DELETE FROM TABLEA WHERE id = x AND TABLEA_id NOT IN 
    (SELECT TABLEA_id FROM TABLEA WHERE id = x ORDER BY date_sent DESC LIMIT 10)