xóa bình luận hàng loạt


11

Làm thế nào tôi có thể xóa tất cả các ý kiến ​​cùng một lúc? Tôi đã thấy làm thế nào để làm điều đó với các nút và mô đun số lượng lớn, Làm thế nào để xóa tất cả các nút của một loại nội dung nhất định? nhưng đang xem xét một giải pháp tương tự cho ý kiến.

Tôi đang tìm kiếm một giải pháp không để lại bất kỳ hiện vật nào trong cơ sở dữ liệu. Là lượt xem hoạt động hàng loạt là giải pháp tốt nhất?

Câu trả lời:


7

AFAIK, VBO sẽ có thể thực hiện công việc, nhưng tôi đã không thử tự mình xóa các bình luận.

Một cách khác là chạy một số mã (trong một mô-đun hoặc trong khối 'thực thi php' của mô-đun Devel) để nhận danh sách tất cả các truy vấn từ db, xây dựng một mảng ID nhận xét và chuyển mảng đó sang hàm comment_delete_multipl . Lưu ý rằng việc này có thể mất một chút thời gian để hoàn thành (tùy thuộc vào hiệu suất của máy chủ và số lượng bình luận), do đó, bạn có thể giải quyết vấn đề đó bằng cách sử dụng set_time_limit (http://php.net/manual/en/feft .set-time-limit.php) hoặc API lô của Drupal.

[cập nhật: xem câu trả lời của Chris Cohen cho mã ví dụ dựa trên phương pháp này.]


7

Đây không phải là một câu trả lời thay thế, hơn nữa là một chi tiết về marcvangend, nhưng tôi không thể nhận xét về câu trả lời của anh ấy và để lại mã ví dụ. Vì vậy, cách tiếp cận thủ công, sử dụng khối mã thực thi của devel, sẽ trông giống như:


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

comment_delete_multiple($cids);

Như marcvangend chỉ ra, điều này sẽ bị giới hạn trong thời gian thực hiện trên máy chủ của bạn, vì vậy bạn sẽ cần tạm thời nâng nó lên nếu bạn có nhiều bình luận. Cảm ơn manarth và instanceofjamie đã hỗ trợ dbtng.


1
Cảm ơn đã chỉ đường, nhưng cú pháp của bạn đã tắt. Bảng là comment, bạn cần một bí danh và kết quả đối tượng thô không thể được cung cấp trực tiếp vàocomment_delte_multiple
brian_d 15/03/2016

@brian_d làm thế nào bạn sẽ xử lý các kết quả đối tượng thô đã sẵn sàng cho comment_delte_mult Môn ()?
jackocnr

2

Cá nhân, tôi sẽ sử dụng mô-đun Lượt xem hoạt động hàng loạt .

Mô-đun này tăng Chế độ xem bằng cách cho phép các hoạt động hàng loạt được thực thi trên các hàng được hiển thị. Nó làm như vậy bằng cách hiển thị một hộp kiểm phía trước mỗi nút và thêm một hộp chọn có chứa các hoạt động có thể được áp dụng. Hành động Drupal Core hoặc Rules có thể được sử dụng.


0

Thành thật khi tôi cần làm điều này tôi chỉ cần làm điều đó trong cơ sở dữ liệu. Bạn xóa các bình luận, sửa các số liệu thống kê bình luận và gặp sự cố, tất cả các bình luận đều biến mất. Tôi sẽ tránh làm điều này nếu bạn có các mô-đun tương tác với các bình luận theo một cách kỳ lạ, nếu không thì đó là những gì tôi đề xuất.

BẢNG bình luận

CẬP NHẬT node_comment_statistic SET bình luận_count = 0


Tôi nghĩ rằng lợi thế của việc sử dụng lệnh gọi drupal API comment_delete_multiplelà nó có thể gọi các hook drupal bổ sung cho bạn, để DB của bạn có khả năng sạch hơn.
brian_d

Đó là lý do tại sao tôi nói tôi khuyên bạn nên tránh làm như vậy nếu bạn có các mô-đun tương tác với các bình luận. Mặt khác, nếu bạn có ý kiến ​​chứng khoán, tôi chưa bao giờ lưu ý bất kỳ vấn đề nào với nó. Chắc chắn sẽ dễ dàng hơn rất nhiều nếu bạn có một trang web bị spam với hàng ngàn bình luận.
G.Martin

Bạn cũng cần phải cắt bớt bảng 'field_data_comment_body', vì đó là nơi lưu trữ nội dung bình luận.
Creynders

0

Một số công cụ UI Bạn có thể cài đặt các mô-đun bên dưới

Lượt xem - drupal.org/project/view

Mọi trang web Drupal đều cần, tôi tin rằng ... Nó tạo SQL ở phần cuối và hiển thị kết quả với các cài đặt có thể định cấu hình, bộ lọc, sắp xếp, phân trang ... vv

VBO - http://drupal.org/project/view_bulk_operations Để cho phép các hoạt động hàng loạt (tức là xóa nhận xét cho chủ đề này)

Chế độ xem quản trị - http://drupal.org/project/admin_view Tận dụng lợi thế của Lượt xem và VBO, thay thế trang gốc, bình luận, trang quản trị người dùng bằng menu_alter ...

  1. Sau khi kích hoạt các mô-đun trên, quay lại trang quản trị nhận xét
  2. Chọn tất cả ( cẩn thận , đảm bảo bạn muốn xóa tất cả các nhận xét ...)
  3. Chọn "Xóa" và "Gửi" ( cẩn thận , không có thêm nút xác nhận nào sau này ...)

0

Đạt được xóa khoảng 45.000 bình luận bằng cách sử dụng mô-đun Sao lưu và Di chuyển. Trong phần nâng cao được thiết lập trong 'Loại trừ dữ liệu từ các bảng sau' - trước tiên hãy nhấn phím Ctrl sau đó chọn nhận xét trong danh sách - (hãy cẩn thận vì ở đây các bảng bộ đệm không cần thiết đã được chọn) - sao lưu - khôi phục từ tệp sao lưu này. Tiếng hoan hô!


0

Câu trả lời này tương tự như câu trả lời đã được liệt kê nhưng tôi đã sửa đổi nó để ngăn chặn 'lỗi hết bộ nhớ' cho khoảng 27.000 bình luận. Điều này sẽ mất một thời gian để thực hiện tùy thuộc vào số lượng ý kiến. Đơn giản chỉ cần cắt bớt bảng ý kiến ​​có thể không phải là một ý tưởng tốt; tốt nhất là để Drupal xử lý việc xóa nội dung.

Tôi đã tạo một tập lệnh PHP:

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

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

... sau đó chạy kịch bản với Drush

drush @my_alias php-script my_script.php

0

Tôi thường khuyên bạn nên sử dụng VBO để xóa hàng loạt bình luận hoặc nút nhưng nếu bạn ở trong tình huống khi bạn có hàng trăm ngàn bình luận và bạn không có quá nhiều thời gian, đây là một truy vấn sql sẽ xóa tất cả các bình luận không được chấp thuận cùng với tất cả các sửa đổi và dữ liệu liên quan đến những bình luận mà trong trường hợp của tôi đã chiếm 1,2Gb dung lượng trong 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

-2

Kích hoạt bộ lọc PHP và tạo một trang cơ bản với mã sau:

<?php
  db_query("TRUNCATE TABLE {comment}");
  db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>

1
không bao giờ sử dụng bộ lọc PHP cho những thứ như vậy (ngay cả đối với bất kỳ thứ gì khác, bộ lọc PHP nói chung là một trong những ý tưởng tồi tệ nhất trong Drupal)
Alejandro Moreno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.