すべてのコメントを一度に削除するにはどうすればよいですか?ノードとバルク削除モジュールでそれを行う方法を見てきました、特定のコンテンツタイプのすべてのノードを削除する方法は? しかし、コメントのために同様の解決策を見ています。
データベースにアーティファクトを残さないソリューションを探しています。Views Bulk Operationsは最良のソリューションですか?
すべてのコメントを一度に削除するにはどうすればよいですか?ノードとバルク削除モジュールでそれを行う方法を見てきました、特定のコンテンツタイプのすべてのノードを削除する方法は? しかし、コメントのために同様の解決策を見ています。
データベースにアーティファクトを残さないソリューションを探しています。Views Bulk Operationsは最良のソリューションですか?
回答:
私の知る限り、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の回答を参照してください。]
これは代替回答ではなく、マルクヴァンゲンドの詳細ですが、私は彼の回答についてコメントしたり、サンプルコードを残したりできませんでした。したがって、develの実行コードブロックを使用した手動のアプローチは、次のようになります。
$cids = db_select('comment', 'c')
->fields('c', array('cid'))
->execute()
->fetchCol();
comment_delete_multiple($cids);
marcvangendが指摘するように、これはサーバーでの実行時間に制限されるため、コメントが多い場合は一時的に上げる必要があります。dbtngの援助をしてくれたmanarthとinstanceofjamieに感謝します。
正直なところ、これを実行する必要があるときは、データベースで実行しました。コメントを削除し、コメントの統計と偽装を修正すると、すべてのコメントが消えます。奇妙な方法でコメントとやり取りするモジュールがある場合は、これを避けます。それ以外の場合は、これを提案します。
TRUNCATE TABLEコメント
UPDATE node_comment_statistics SET comment_count = 0
comment_delete_multiple
追加のdrupalフックを呼び出すことができるため、DBがクリーンになる可能性があることです。
いくつかの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によるユーザ管理ページを置き換えてください...
この回答は既にリストされている回答に似ていますが、約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
私は通常、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
PHPフィルターを有効にし、次のコードで基本的なページを作成します。
<?php
db_query("TRUNCATE TABLE {comment}");
db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>
comment
であり、エイリアスが必要です。生オブジェクトの結果を直接に入力することはできませんcomment_delte_multiple