1

WordPress で bbPress 1.0 のインストールを新しい bbPress 2.0 プラグインに移行しようとして失敗しましたwp_posts

topic値を持っていたすべての投稿と列を削除することでそれを解決しましたがreplypost_typeそれは良かったです。

しかし今wp_postmeta、私が削除した投稿を参照している多くのエントリの影響を受けているように見えることに気付きました. 両方のテーブルにpost_id列があります。

wp_postmeta問題は、もう使用されていない参照行の値を削除するために使用する SQL コマンドはwp_postsどれかということです。使用すべき何らかの結合であることは知っていますが、そこにないものを探して削除する方法がわかりません。

PS: WordPress のテーブルが参照整合性を維持していないのはなぜですか? wp_postmetaに関連するものを削除するときに、 から何かを自動的に削除できると確信していwp_postsます。まあ…</p>

4

2 に答える 2

0

テーブル b に一致しない行をテーブル a から手動で削除する一般的な方法は次のとおりです。

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

これは一括削除を行う最も効率的な方法ではないかもしれません (結合はおそらくそれをより速く行うことができます) が、私は通常、このような場合には副選択を好みます。 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 に答える