web-dev-qa-db-fra.com

suppression en masse des commentaires

comment puis-je supprimer tous les commentaires à la fois? J'ai vu comment le faire avec les nœuds et le module de suppression en bloc, Comment supprimer tous les nœuds d'un type de contenu donné? mais je cherche une solution similaire pour les commentaires.

Je recherche une solution qui ne laisse aucun artefact dans la base de données. Views Bulk Operations est-il la meilleure solution?

11
brian_d

AFAIK, VBO devrait pouvoir faire le travail, mais je ne l'ai pas essayé moi-même pour supprimer les commentaires.

Une autre façon consiste à exécuter du code (dans un module ou dans le bloc `` exécuter php '' du module Devel) qui obtient une liste de toutes les requêtes de la base de données, crée un tableau des ID de commentaire et passe ce tableau au comment_delete_multiple fonction. Notez que cela peut prendre un certain temps (en fonction des performances du serveur et du nombre de commentaires), vous devrez peut-être contourner cela, par exemple en utilisant set_time_limit (http://php.net/manual/en/function .set-time-limit.php) ou l'API batch de Drupal.

[mise à jour: voir la réponse de Chris Cohen pour un exemple de code basé sur cette approche.]

7
marcvangend

Ce n'est pas une réponse alternative, plus une élaboration sur celle de marcvangend, mais je n'ai pas pu commenter sa réponse et laisser un exemple de code. Ainsi, l'approche manuelle, utilisant le bloc de code d'exécution de devel, ressemblerait un peu à:


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

comment_delete_multiple($cids);

Comme le souligne marcvangend, cela va être limité au temps d'exécution sur votre serveur, vous devrez donc l'augmenter temporairement si vous avez beaucoup de commentaires. Merci à manarth et instanceofjamie pour l'aide de dbtng.

7
Chris Cohen

Personnellement, j'irais pour le module Views Bulk Operations .

Ce module augmente les vues en permettant l'exécution d'opérations en bloc sur les lignes affichées. Pour ce faire, il affiche une case à cocher devant chaque nœud et ajoute une zone de sélection contenant les opérations qui peuvent être appliquées. Drupal Core ou Rules peuvent être utilisées.

2
Karl Jóhann

Cette réponse est similaire à une réponse déjà répertoriée mais je l'ai modifiée pour éviter une "erreur de mémoire insuffisante" pour environ 27 000 commentaires. Cela prendra un certain temps à s'exécuter en fonction du nombre de commentaires. Le simple fait de tronquer le tableau des commentaires peut ne pas être une bonne idée; il est préférable de laisser Drupal gérer la suppression du contenu.

J'ai créé un script PHP:

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

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

... puis a exécuté le script avec Drush

drush @my_alias php-script my_script.php
0
Parag

Honnêtement, quand je devais le faire, je l'ai fait dans la base de données. Vous supprimez les commentaires, corrigez les statistiques de commentaire et pouf, tous les commentaires ont disparu. J'éviterais de le faire si vous avez des modules qui interagissent avec les commentaires d'une manière étrange, sinon c'est ce que je suggère.

Commentaires TRUNCATE TABLE

UPDATE node_comment_statistics SET comment_count = 0

0
G.Martin

Obtention de la suppression d'environ 45 000 commentaires à l'aide du module Sauvegarde et migration. Dans la configuration avancée dans `` Exclure les données des tableaux suivants '' - appuyez d'abord sur la touche Ctrl puis sélectionnez un commentaire dans la liste - (faites attention car ici les tables de cache inutiles sont déjà sélectionnées) - sauvegarde - restaurez à partir de ce fichier sauvegardé. Hourra!

0
VivMajor

Quelques outils d'interface utilisateur Vous pouvez installer les modules ci-dessous

Vues - drupal.org/project/views

Chaque Drupal site a besoin, je crois ... Il génère du SQL au niveau du backend et affiche les résultats avec des paramètres configurables, des filtres, le tri, la pagination ... etc.

VBO - http://drupal.org/project/views_bulk_operations Pour autoriser les opérations en masse (c'est-à-dire supprimer les commentaires pour ce fil)

Vues d'administration - http://drupal.org/project/admin_views Profitez des vues et du VBO, remplacez le contnet d'origine, le commentaire, les pages d'administration de l'utilisateur par menu_alter ...

  1. Après avoir activé les modules ci-dessus, revenez à la page d'administration des commentaires
  2. Cochez tout sélectionner ( soyez prudent , assurez-vous que vous souhaitez supprimer tous les commentaires ...)
  3. Sélectionnez "Supprimer" et "Soumettre" ( faites attention , plus de bouton de confirmation plus tard ...)
0
Ck Poon

Je recommanderais généralement d'utiliser VBO pour supprimer des commentaires ou des nœuds en bloc, mais si vous êtes dans une situation où vous avez des centaines de milliers de commentaires et que vous n'avez pas trop de temps, voici une requête SQL qui supprimera tous les commentaires non approuvés ainsi que toutes les révisions et données liées à ces commentaires qui, dans mon cas, prenaient 1,2 Go d'espace dans DB

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