모든 댓글을 한 번에 삭제하려면 어떻게해야합니까? 노드 및 bulkdelete 모듈을 사용하여 수행하는 방법, 주어진 컨텐츠 유형의 모든 노드를 삭제하는 방법을 보았습니다 . 그러나 의견에 대한 비슷한 솔루션을 찾고 있습니다.
데이터베이스에 아티팩트를 남기지 않는 솔루션을 찾고 있습니다. Views Bulk Operations가 최상의 솔루션입니까?
모든 댓글을 한 번에 삭제하려면 어떻게해야합니까? 노드 및 bulkdelete 모듈을 사용하여 수행하는 방법, 주어진 컨텐츠 유형의 모든 노드를 삭제하는 방법을 보았습니다 . 그러나 의견에 대한 비슷한 솔루션을 찾고 있습니다.
데이터베이스에 아티팩트를 남기지 않는 솔루션을 찾고 있습니다. Views Bulk Operations가 최상의 솔루션입니까?
답변:
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의 답변을 참조하십시오.]
이것은 대안적인 답변이 아니며 marcvangend에 대한 자세한 설명이지만 그의 답변에 대해 언급하고 예제 코드를 남길 수는 없습니다. 따라서 devel의 실행 코드 블록을 사용하는 수동 접근 방식은 다음과 같습니다.
$cids = db_select('comment', 'c')
->fields('c', array('cid'))
->execute()
->fetchCol();
comment_delete_multiple($cids);
marcvangend가 지적했듯이, 이것은 서버에서의 실행 시간으로 제한 될 것이므로 많은 의견이 있으면이를 일시적으로 제기해야합니다. dbtng 지원에 대한 manarth 및 instanceofjamie에게 감사합니다.
개인적으로 Views Bulk Operations 모듈로갑니다.
이 모듈은 표시된 행에서 대량 작업을 실행할 수 있도록하여 뷰를 확장합니다. 각 노드 앞에 확인란을 표시하고 적용 할 수있는 작업이 포함 된 선택 상자를 추가하면됩니다. Drupal Core 또는 규칙 작업을 사용할 수 있습니다.
솔직히이 작업을 수행해야 할 때 데이터베이스에서 수행했습니다. 주석을 삭제하고 주석 통계 및 of을 수정하면 모든 주석이 사라집니다. 모듈이 이상한 방식으로 주석과 상호 작용하면 그렇지 않으면 내가 제안한 것이 있으면이 작업을 피하십시오.
TRUNCATE TABLE 주석
업데이트 node_comment_statistics SET comment_count = 0
comment_delete_multiple
추가 drupal 후크를 호출하여 DB를 잠재적으로 깨끗하게 유지할 수 있다는 것입니다.
일부 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하여 사용자 관리 페이지를 대체 가지고 ...
이 답변은 이미 나열된 답변과 비슷하지만 약 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
일반적으로 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
PHP 필터를 활성화하고 다음 코드를 사용하여 기본 페이지를 만듭니다.
<?php
db_query("TRUNCATE TABLE {comment}");
db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>
comment
. 별칭이 필요하고 원시 객체 결과를 직접 공급할 수 없습니다comment_delte_multiple