주석을 일괄 삭제


11

모든 댓글을 한 번에 삭제하려면 어떻게해야합니까? 노드 및 bulkdelete 모듈을 사용하여 수행하는 방법, 주어진 컨텐츠 유형의 모든 노드를 삭제하는 방법을 보았습니다 . 그러나 의견에 대한 비슷한 솔루션을 찾고 있습니다.

데이터베이스에 아티팩트를 남기지 않는 솔루션을 찾고 있습니다. Views Bulk Operations가 최상의 솔루션입니까?

답변:


7

AFAIK, 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의 답변을 참조하십시오.]


7

이것은 대안적인 답변이 아니며 marcvangend에 대한 자세한 설명이지만 그의 답변에 대해 언급하고 예제 코드를 남길 수는 없습니다. 따라서 devel의 실행 코드 블록을 사용하는 수동 접근 방식은 다음과 같습니다.


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

comment_delete_multiple($cids);

marcvangend가 지적했듯이, 이것은 서버에서의 실행 시간으로 제한 될 것이므로 많은 의견이 있으면이를 일시적으로 제기해야합니다. dbtng 지원에 대한 manarth 및 instanceofjamie에게 감사합니다.


1
지시에 감사하지만 구문이 꺼져 있습니다. 표는입니다 comment. 별칭이 필요하고 원시 객체 결과를 직접 공급할 수 없습니다comment_delte_multiple
brian_d

@ brian_d comment_delte_multiple () 준비가 된 원시 객체 결과를 어떻게 처리합니까?
jackocnr

2

개인적으로 Views Bulk Operations 모듈로갑니다.

이 모듈은 표시된 행에서 대량 작업을 실행할 수 있도록하여 뷰를 확장합니다. 각 노드 앞에 확인란을 표시하고 적용 할 수있는 작업이 포함 된 선택 상자를 추가하면됩니다. Drupal Core 또는 규칙 작업을 사용할 수 있습니다.


0

솔직히이 작업을 수행해야 할 때 데이터베이스에서 수행했습니다. 주석을 삭제하고 주석 통계 및 of을 수정하면 모든 주석이 사라집니다. 모듈이 이상한 방식으로 주석과 상호 작용하면 그렇지 않으면 내가 제안한 것이 있으면이 작업을 피하십시오.

TRUNCATE TABLE 주석

업데이트 node_comment_statistics SET comment_count = 0


drupal API 호출의 장점은 comment_delete_multiple추가 drupal 후크를 호출하여 DB를 잠재적으로 깨끗하게 유지할 수 있다는 것입니다.
brian_d

그래서 모듈이 주석과 상호 작용하는 경우 그렇게하지 않는 것이 좋습니다. 그렇지 않으면 당신이 주식 의견을 가지고 있다면, 나는 그것에 대해 어떤 문제도 언급하지 않았습니다. 수천 개의 댓글이 포함 된 스팸 사이트가있는 경우 훨씬 쉽게 수행 할 수 있습니다.
G.Martin

주석 내용이 저장되는 위치 인 'field_data_comment_body'테이블도 잘라야합니다.
Creynders

0

일부 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하여 사용자 관리 페이지를 대체 가지고 ...

  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 쿼리가 있습니다. 필자의 경우 DB에서 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 필터는 드루팔에서 최악의 아이디어 중 하나입니다)
Alejandro Moreno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.