web-dev-qa-db-ja.com

コメントの一括削除

すべてのコメントを一度に削除するにはどうすればよいですか?ノードとバルク削除モジュールでそれを行う方法を見てきました 特定のコンテンツタイプのすべてのノードを削除する方法は? ですが、コメントの同様の解決策を見ています。

データベースにアーティファクトを残さないソリューションを探しています。 Views Bulk Operationsは最良のソリューションですか?

11
brian_d

私の知る限り、VBOはその仕事をすることができるはずですが、私は自分でコメントを削除することを試みていません。

別の方法は、dbからすべてのクエリのリストを取得し、コメントIDの配列を作成してその配列を comment_delete_multipleに渡すモジュールまたはDevelモジュールの「execute php」ブロックで)コードを実行することです 関数。これは完了するまでに時間がかかる場合があります(サーバーのパフォーマンスとコメントの数によって異なります)。そのため、たとえばset_time_limit(http://php.net/manual/en/function .set-time-limit.php)またはDrupalのバッチAPI。

[更新:このアプローチに基づくコード例については、Chris Cohenの回答を参照してください。]

7
marcvangend

これは代替回答ではなく、マルクヴァンゲンドの詳細ですが、私は彼の回答についてコメントしたり、コード例を残すことができませんでした。したがって、develの実行コードブロックを使用した手動のアプローチは、次のようになります。


$cids = db_select('comment', 'c')
  ->fields('c', array('cid'))
  ->execute()
  ->fetchCol();

comment_delete_multiple($cids);

Marcvangendが指摘するように、これはサーバーでの実行時間に制限されるため、コメントが多い場合は一時的に上げる必要があります。 dbtngの援助をしてくれたmanarthとinstanceofjamieに感謝します。

7
Chris Cohen

個人的に、私は Views Bulk Operations モジュールに行きます。

このモジュールは、表示された行に対して一括操作を実行できるようにすることで、ビューを拡張します。これは、各ノードの前にチェックボックスを表示し、適用可能な操作を含む選択ボックスを追加することによって行われます。 Drupalコアアクションまたはルールアクションを使用できます。

2
Karl Jóhann

この回答はすでにリストされている回答に似ていますが、約27,000件のコメントに対する「メモリ不足エラー」を防ぐために変更しました。コメントの数によっては、実行に時間がかかります。コメントテーブルを単に切り捨てるのは良い考えではないかもしれません。 Drupalでコンテンツの削除を処理することをお勧めします。

PHPスクリプトを作成しました:

$cids = db_select('comment', 'c')
  ->fields('c', array('cid'))
  ->execute()
  ->fetchCol();

foreach($cids as $cid)
{
  comment_delete($cid);
}

...そしてDrushでスクリプトを実行しました

drush @my_alias php-script my_script.php
0
Parag

正直なところ、これを実行する必要があるときは、データベースで実行しました。コメントを削除し、コメントの統計と偽装を修正すると、すべてのコメントが消えます。奇妙な方法でコメントとやり取りするモジュールがある場合は、これを回避します。それ以外の場合は、これを提案します。

TRUNCATE TABLEコメント

UPDATE node_comment_statistics SET comment_count = 0

0
G.Martin

バックアップと移行モジュールを使用して、約45,000件のコメントの削除を実現しました。 「次のテーブルからデータを除外する」の詳細設定で、最初にCtrlキーを押してリストでコメントを選択します(ここでは不要なキャッシュテーブルがすでに選択されているため注意してください)-バックアップ-このバックアップファイルから復元します。フラー!

0
VivMajor

いくつかのUIツール以下のモジュールをインストールできます

ビュー-drupal.org/project/views

すべてのDrupalサイトのニーズ、私は信じています...バックエンドでSQLを生成し、構成可能な設定、フィルター、並べ替え、ページングなどで結果を表示します...など

VBO- http://drupal.org/project/views_bulk_operations 一括操作を許可する(つまり、このスレッドのコメントを削除する)

管理ビュー- http://drupal.org/project/admin_views ビューとVBOを利用し、元のcontnet、コメント、ユーザー管理ページをmenu_alterに置き換えます...

  1. 上記のモジュールを有効にした後、コメント管理ページに戻ります
  2. すべて選択にチェックマークを付けます(注意してください、すべてのコメントを削除することを確認してください...)
  3. [削除]と[送信]を選択します(注意してください、後で確認ボタンはもうありません...)
0
Ck Poon

私は通常、VBOを使用してコメントまたはノードを一括で削除することをお勧めしますが、数十万のコメントがあり、時間があまりない場合は、承認されていないコメントをすべて削除するSQLクエリを次に示します私の場合、DBで1.2 GBのスペースを使用していたコメントに関連するすべてのリビジョンとデータとともに

DELETE c, rcb, dcb
FROM
    comment AS c
JOIN field_revision_comment_body AS rcb ON (c.cid = rcb.entity_id)
JOIN field_data_comment_body AS dcb ON (rcb.entity_id = dcb.entity_id)
WHERE
    c. STATUS = 0
0
Octan