1

我尝试将 bbPress 1.0 安装迁移到我的 WordPress 上的新 bbPress 2.0 插件没有成功,这在我的wp_posts桌子上弄得一团糟。

我通过删除所有携带值topic和列reply的帖子来解决这个问题,post_type这很好。

但现在我注意到wp_postmeta似乎受到许多引用我已删除的帖子的条目的影响。两个表都有post_id列。

问题是:我使用哪个 SQL 命令来删除wp_postmeta不再存在的引用行上的值wp_posts?我知道这是我应该使用的某种连接,但我不明白寻找不存在的东西并删除它会怎样。

PS:WordPress 表没有保持参照完整性是怎么回事?我很确定wp_postmeta在删除相关内容时可以自动删除一些内容wp_posts。哦,好吧……</p>

4

2 回答 2

0

从表 a 中手动删除表 b 中不匹配的行的一般方法是:

DELETE FROM table_a WHERE some_id NOT IN (SELECT some_id FROM table_b);

这可能不是进行批量删除的最有效方法(连接可能会更快),但在这种情况下我通常更喜欢子选择,它更容易理解,因此降低了 FUBAR 概率(你不想要意外删除 table_b 中的行等)

所以在你的情况下,你可能会做这样的事情:

SELECT * FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);

如果您确定,这些是您要删除的行,请将 SELECT * 替换为 DELETE:

DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
于 2011-06-19T04:14:50.873 回答
-1

我知道这是我应该使用的某种连接,但我不明白寻找不存在的东西并删除它会怎样。

是的,您想使用外连接。

PS:WordPress 表没有保持参照完整性是怎么回事?

许多较新的应用程序现在使用实体框架并且不明确地强制引用完整性,只是关系。例如,Atlassian JIRA 不强制执行参照完整性。

于 2011-06-19T03:35:06.150 回答