2015-10-01 45 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)