Kommentare in großen Mengen löschen

11

Wie kann ich alle Kommentare gleichzeitig löschen? Ich habe gesehen, wie es mit Knoten und Bulkdelete-Modul gemacht wird. Wie lösche ich alle Knoten eines bestimmten Inhaltstyps? Ich suche aber eine ähnliche Lösung für Kommentare.

Ich suche nach einer Lösung, die keine Artefakte in der Datenbank hinterlässt. Ist Views Bulk Operations die beste Lösung?

brian_d
quelle

Antworten:

7

AFAIK, VBO sollte in der Lage sein, die Arbeit zu erledigen, aber ich habe es nicht selbst versucht, Kommentare zu löschen.

Eine andere Möglichkeit besteht darin, Code auszuführen (in einem Modul oder im Block 'execute php' des Devel-Moduls), der eine Liste aller Abfragen aus der Datenbank abruft , ein Array der Kommentar-IDs erstellt und dieses Array an die Funktion comment_delete_multiple übergibt . Beachten Sie, dass dies eine Weile dauern kann (abhängig von der Serverleistung und der Anzahl der Kommentare), sodass Sie dies möglicherweise umgehen können, indem Sie beispielsweise set_time_limit (http://php.net/manual/en/function) verwenden .set-time-limit.php) oder die Batch-API von Drupal.

[Update: Siehe Chris Cohens Antwort zum Beispiel Code, der auf diesem Ansatz basiert.]

Marcvangend
quelle
7

Dies ist keine alternative Antwort, sondern eine Ausarbeitung von Marcvangend, aber ich konnte seine Antwort nicht kommentieren und keinen Beispielcode hinterlassen. Der manuelle Ansatz unter Verwendung des Ausführungscodeblocks von devel würde also ungefähr so ​​aussehen:


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

comment_delete_multiple($cids);

Wie marcvangend hervorhebt, wird dies auf die Ausführungszeit auf Ihrem Server beschränkt sein, sodass Sie diese vorübergehend erhöhen müssen, wenn Sie viele Kommentare haben. Vielen Dank an manarth und instanceofjamie für die dbtng-hilfe.

Chris Cohen
quelle
1
Danke für die Richtung, aber deine Syntax ist aus. Die Tabelle ist comment, Sie benötigen einen Alias ​​und die comment_delte_multiple
Rohobjektergebnisse
@brian_d Wie würden Sie die Rohobjektergebnisse verarbeiten, die für comment_delte_multiple () bereit sind?
Jackocnr
2

Persönlich würde ich mich für das Modul Views Bulk Operations entscheiden .

Dieses Modul erweitert Ansichten, indem Massenoperationen in den angezeigten Zeilen ausgeführt werden können. Dazu wird vor jedem Knoten ein Kontrollkästchen angezeigt und ein Auswahlfeld mit Operationen hinzugefügt, die angewendet werden können. Drupal Core- oder Rules-Aktionen können verwendet werden.

Karl Jóhann
quelle
0

Ehrlich gesagt, als ich das tun musste, habe ich es einfach in der Datenbank gemacht. Sie löschen die Kommentare, korrigieren die Kommentarstatistik und poof, alle Kommentare sind weg. Ich würde dies vermeiden, wenn Module auf seltsame Weise mit den Kommentaren interagieren, andernfalls würde ich dies vorschlagen.

TRUNCATE TABLE Kommentare

UPDATE node_comment_statistics SET comment_count = 0

G. Martin
quelle
Ich denke, der Vorteil der Verwendung des Drupal-API-Aufrufs comment_delete_multiplebesteht darin, dass zusätzliche Drupal-Hooks für Sie aufgerufen werden können, wodurch Ihre Datenbank möglicherweise sauberer wird.
Brian_d
Deshalb habe ich gesagt, ich würde vorschlagen, dies zu vermeiden, wenn Module mit den Kommentaren interagieren. Ansonsten, wenn Sie Aktienkommentare haben, habe ich nie Probleme damit festgestellt. Es ist sicherlich viel einfacher, wenn Sie eine Website haben, die mit Tausenden von Kommentaren gespammt wurde.
G. Martin
Sie müssen auch die Tabelle 'field_data_comment_body' abschneiden, da dort der Kommentarinhalt gespeichert wird.
Creynders
0

Einige UI-Tools Sie können die folgenden Module installieren

Ansichten - drupal.org/project/views

Ich glaube, jede Drupal-Site benötigt ... Sie generiert SQL im Backend und zeigt Ergebnisse mit konfigurierbaren Einstellungen, Filtern, Sortieren, Paging usw. an

VBO - http://drupal.org/project/views_bulk_operations Um Massenoperationen zuzulassen (dh Kommentare für diesen Thread zu löschen)

Administrationsansichten - http://drupal.org/project/admin_views Nutzen Sie die Vorteile von Ansichten und VBO, ersetzen Sie das ursprüngliche Contnet, den Kommentar und die Benutzerverwaltungsseiten durch menu_alter ...

  1. Kehren Sie nach dem Aktivieren der obigen Module zur Kommentar-Administrationsseite zurück
  2. Aktivieren Sie das Kontrollkästchen Alle auswählen ( seien Sie vorsichtig , stellen Sie sicher , dass Sie alle Kommentare löschen möchten ...)
  3. Wählen Sie "Löschen" und "Senden" ( Vorsicht , später keine Bestätigungstaste mehr ...)
Ck Poon
quelle
0

Das Löschen von ca. 45.000 Kommentaren mithilfe des Moduls "Sichern und Migrieren" wurde erreicht. In der erweiterten Einrichtung unter 'Daten aus den folgenden Tabellen ausschließen' - drücken Sie zuerst die Strg-Taste und wählen Sie dann einen Kommentar in der Liste aus - (Vorsicht, da hier bereits die nicht benötigten Cache-Tabellen ausgewählt sind) - Sichern - Wiederherstellen aus dieser gesicherten Datei. Hurra!

VivMajor
quelle
0

Diese Antwort ähnelt einer bereits aufgelisteten Antwort, aber ich habe sie geändert, um einen Fehler aufgrund von Speichermangel für etwa 27.000 Kommentare zu vermeiden. Die Ausführung dauert abhängig von der Anzahl der Kommentare eine Weile. Das einfache Abschneiden der Kommentartabelle ist möglicherweise keine gute Idee. Es ist am besten, Drupal das Löschen von Inhalten überlassen.

Ich habe ein PHP-Skript erstellt:

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

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

... dann lief das Skript mit Drush

drush @my_alias php-script my_script.php
Parag
quelle
0

Normalerweise würde ich empfehlen, VBO zu verwenden, um Kommentare oder Knoten in großen Mengen zu löschen. Wenn Sie jedoch in einer Situation sind, in der Sie Hunderttausende von Kommentaren haben und nicht zu viel Zeit haben, finden Sie hier eine SQL-Abfrage, mit der alle nicht genehmigten Kommentare gelöscht werden zusammen mit allen Revisionen und Daten im Zusammenhang mit den Kommentaren, die in meinem Fall 1,2 GB Speicherplatz in der Datenbank beanspruchten

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
Octan
quelle
-2

Aktivieren Sie den PHP-Filter und erstellen Sie eine Basisseite mit dem folgenden Code:

<?php
  db_query("TRUNCATE TABLE {comment}");
  db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>
jordi
quelle
1
Verwenden Sie niemals PHP-Filter für solche Dinge (auch für andere Dinge ist PHP-Filter im Allgemeinen eine der schlechtesten Ideen in Drupal)
Alejandro Moreno