การลบความคิดเห็นเป็นกลุ่ม


11

ฉันจะลบความคิดเห็นทั้งหมดในครั้งเดียวได้อย่างไร ฉันได้เห็นวิธีการทำกับโหนดและโมดูล bulkdelete ฉันจะลบโหนดทั้งหมดของประเภทเนื้อหาที่กำหนดได้อย่างไร แต่ฉันกำลังมองหาโซลูชันที่คล้ายกันสำหรับความคิดเห็น

ฉันกำลังมองหาโซลูชันที่ไม่ทิ้งส่วนใด ๆ ไว้ในฐานข้อมูล การดำเนินการเป็นกลุ่ม Views เป็นทางออกที่ดีที่สุดหรือไม่

คำตอบ:


7

AFAIK, VBO ควรจะสามารถทำงานได้ แต่ฉันไม่ได้ลองด้วยตัวเองเพื่อลบความคิดเห็น

อีกวิธีหนึ่งคือการเรียกใช้รหัสบางคน (ในโมดูลหรือในบล็อก Devel โมดูล 'รัน PHP) ที่ได้รับรายชื่อของแบบสอบถามทั้งหมดจากฐานข้อมูลการสร้างอาร์เรย์ของรหัสความคิดเห็นและผ่านอาร์เรย์ที่ไปcomment_delete_multipleฟังก์ชั่น โปรดทราบว่าการดำเนินการนี้อาจใช้เวลาสักครู่ (ขึ้นอยู่กับประสิทธิภาพของเซิร์ฟเวอร์และจำนวนความคิดเห็น) ดังนั้นคุณอาจใช้วิธีนี้เช่น set_time_limit (http://php.net/manual/en/function) .set-time-limit.php) หรือ API ชุดงานของ Drupal

[อัพเดต: ดูคำตอบของ Chris Cohen สำหรับโค้ดตัวอย่างตามวิธีการนี้]


7

นี่ไม่ใช่คำตอบทางเลือกเพิ่มเติมเป็นคำอธิบายเพิ่มเติมของ marcvangend แต่ฉันไม่สามารถออกความเห็นเกี่ยวกับคำตอบของเขาและปล่อยรหัสตัวอย่าง ดังนั้นวิธีการแบบแมนนวลโดยใช้การบล็อกโค้ดรันของ devel จะมีลักษณะดังนี้:


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

comment_delete_multiple($cids);

ในขณะที่ marcvangend ชี้ให้เห็นสิ่งนี้จะถูก จำกัด เวลาในการดำเนินการบนเซิร์ฟเวอร์ของคุณดังนั้นคุณจะต้องเพิ่มมันชั่วคราวหากคุณมีความคิดเห็นจำนวนมาก ขอบคุณ manarth และ instanceofjamie สำหรับความช่วยเหลือ dbtng


1
ขอบคุณสำหรับทิศทาง แต่ไวยากรณ์ของคุณปิดอยู่ ตารางคือcommentคุณต้องใช้นามแฝงและไม่สามารถป้อนผลลัพธ์วัตถุดิบได้โดยตรงcomment_delte_multiple
brian_d

@brian_d คุณจะประมวลผลผลลัพธ์วัตถุดิบพร้อมสำหรับ comment_delte_multiple () อย่างไร
jackocnr

2

โดยส่วนตัวฉันจะไปหาโมดูลการดำเนินการจำนวนมากของ Views

โมดูลนี้เพิ่มการรับชมโดยอนุญาตให้ดำเนินการเป็นกลุ่มในแถวที่แสดง มันทำได้โดยการแสดงช่องทำเครื่องหมายที่ด้านหน้าของแต่ละโหนดและเพิ่มกล่องเลือกที่มีการดำเนินการที่สามารถนำไปใช้ สามารถใช้การทำงานของ Drupal Core หรือกฎ


0

สุจริตเมื่อฉันต้องการทำสิ่งนี้ฉันเพิ่งทำในฐานข้อมูล คุณลบความคิดเห็นแก้ไขสถิติความคิดเห็นและกะเทยความคิดเห็นทั้งหมดจะหายไป ฉันจะหลีกเลี่ยงการทำสิ่งนี้หากคุณมีโมดูลที่โต้ตอบกับความคิดเห็นในแบบที่แปลก ๆ

ตัดทอนความคิดเห็นของตาราง

UPDATE node_comment_statistics SET comment_count = 0


ฉันคิดว่าข้อดีของการใช้ drupal API comment_delete_multipleก็คือมันสามารถเรียก hooks drupal เพิ่มเติมให้คุณทำให้ DB ของคุณสะอาดขึ้น
brian_d

นั่นเป็นเหตุผลที่ฉันบอกว่าฉันขอแนะนำให้หลีกเลี่ยงการทำเช่นนั้นหากคุณมีโมดูลที่โต้ตอบกับความคิดเห็น มิฉะนั้นถ้าคุณมีความคิดเห็นหุ้นฉันไม่เคยสังเกตปัญหาใด ๆ กับมัน มันง่ายกว่ามากถ้าคุณมีเว็บไซต์ที่ได้รับสแปมด้วยความคิดเห็นนับพัน
G.Martin

คุณต้องตัดทอนตาราง 'field_data_comment_body' เช่นกันเนื่องจากเป็นที่เก็บเนื้อหาความคิดเห็น
Creynders

0

เครื่องมือ UI บางอย่างคุณสามารถติดตั้งโมดูลด้านล่าง

Views - drupal.org/project/views

ทุกความต้องการของเว็บไซต์ Drupal ฉันเชื่อว่า ... มันสร้าง SQL ที่แบ็กเอนด์และแสดงผลลัพธ์ด้วยการตั้งค่าที่กำหนดค่าได้ตัวกรองการเรียงลำดับการเพจจิ้ ...

VBO - http://drupal.org/project/views_bulk_operations เพื่ออนุญาตการดำเนินการเป็นกลุ่ม (เช่นลบความคิดเห็นสำหรับเธรดนี้)

มุมมองการดูแลระบบ - http://drupal.org/project/admin_views ใช้ประโยชน์จาก Views และ VBO แทนที่ contnet ต้นฉบับ, ความคิดเห็น, หน้าผู้ดูแลระบบของผู้ใช้โดย menu_alter ...

  1. หลังจากเปิดใช้งานโมดูลด้านบนแล้วให้กลับไปที่หน้าความคิดเห็นของผู้ดูแลระบบ
  2. ทำเครื่องหมายเลือกทั้งหมด ( ระวังให้แน่ใจว่าคุณต้องการลบความคิดเห็นทั้งหมด ... )
  3. เลือก "ลบ" และ "ส่ง" ( ระวังไม่มีปุ่มยืนยันอีกต่อไป ... )

0

ประสบความสำเร็จในการลบความคิดเห็นประมาณ 45,000 ความเห็นโดยใช้โมดูลสำรองข้อมูลและย้ายข้อมูล ในการตั้งค่าขั้นสูงใน 'ไม่รวมข้อมูลจากตารางต่อไปนี้' - ก่อนกดปุ่ม Ctrl จากนั้นเลือกความคิดเห็นในรายการ - (โปรดระวังเพราะที่นี่มีการเลือกตารางแคชที่ไม่จำเป็นไว้แล้ว) - สำรอง - กู้คืนจากไฟล์สำรองนี้ เย่!


0

คำตอบนี้คล้ายกับคำตอบที่ระบุไว้แล้ว แต่ฉันแก้ไขเพื่อป้องกัน 'ข้อผิดพลาดหน่วยความจำไม่เพียงพอ' สำหรับความคิดเห็นประมาณ 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

ฉันมักจะแนะนำให้ใช้ VBO เพื่อลบความคิดเห็นหรือโหนดเป็นกลุ่ม แต่ถ้าคุณอยู่ในสถานการณ์เมื่อคุณมีความคิดเห็นนับแสนและคุณไม่มีเวลามากเกินไปนี่คือแบบสอบถาม SQL ซึ่งจะลบความคิดเห็นที่ไม่ได้รับการอนุมัติทั้งหมด พร้อมกับการแก้ไขทั้งหมดและข้อมูลที่เกี่ยวข้องกับความคิดเห็นเหล่านั้นซึ่งในกรณีของฉันใช้พื้นที่ 1.2Gb ในฐานข้อมูล

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

เปิดใช้งานตัวกรอง PHP และสร้างหน้าพื้นฐานด้วยรหัสต่อไปนี้:

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

1
ไม่เคยใช้ตัวกรอง PHP สำหรับสิ่งต่าง ๆ เช่นนั้น (แม้สำหรับสิ่งอื่นใดก็ตามตัวกรอง PHP โดยทั่วไปแล้วเป็นหนึ่งในแนวคิดที่เลวร้ายที่สุดใน Drupal)
Alejandro Moreno
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.