Drupal 7.で実行しているWebサイトの1つで大量のスパムコメントを受信しました。それらを一括で削除するための解決策を探して、思いつきました。
DELETE FROM comment WERE status = 0
クエリは機能しましたが、データベースのサイズは大幅に縮小せず、「コメント」テーブルに加えて、別のテーブルが
field_data_comment_body
コメントの本文が含まれています。
Drupal 7内のコメントに関連するすべてのテーブルを知りたい
これらをPhpMyAdminで実行します。
TRUNCATE TABLE comment;
TRUNCATE TABLE field_data_comment_body;
UPDATE node_comment_statistics SET comment_count = 0;
TRUNCATE TABLE field_revision_comment_body;
注意:コメントはすべて削除されます!
以下の表を知っています。 1.コメント2. field_data_comment_body 3. field_revision_comment_body 4. node_comment_statistics
それに加えて、コメントはモジュールによってインストールされた他のテーブルにも保存され、コメントモジュールにリンクされていると思います。
したがって、問題は、どのテーブルがDrupal 7?のコメントに関連しているか?どのSQLコマンドを実行するかではない;-)です。
(任意のコンテンツタイプの)コメントエンティティにフィールドを追加していない場合、正しいテーブルについてはすでに言及されています。
コメントエンティティに追加するフィールドごとに、さらに2つのテーブルを取得します。
例:コンテンツタイプ「ブログ」の場合、コメントに電子メールフィールドを追加しました。つまり、admin/structure/types/manage/blog/comment/fieldsでマシン名「field_comment_email」(または同様の名前)のフィールドを見つけます。次に、さらに2つのテーブルがあります。
これはすぐに混乱します。 @Cliveが言ったことを繰り返すには;-)
コメントテーブルから直接コメントを削除することは非常に悪い考えです。API関数を使用する必要があります。