问题
我使用forpressress for 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 :(得分: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的项目,除非该项目位于子选择的结果上。
答案 1 :(得分: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)