我尝试将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
自动删除某些内容。哦,好吧......
答案 0 :(得分: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);
答案 1 :(得分:-1)
我知道这是我应该使用的某种联接,但我不知道如何寻找不存在的东西并将其删除。
是的,您想使用外连接。
PS:WordPress表没有保持参照完整性的原因是什么?
许多较新的应用程序现在使用实体框架,并没有明确强制引用完整性,只是关系。例如,Atlassian JIRA不强制执行参照完整性。