excluir comentários em massa

11

como posso excluir todos os comentários de uma só vez? Eu vi como fazê-lo com nós e módulo bulkdelete. Como excluir todos os nós de um determinado tipo de conteúdo? mas estou procurando uma solução semelhante para comentários.

Estou procurando uma solução que não deixe nenhum artefato no banco de dados. O Views Bulk Operations é a melhor solução?

brian_d
fonte

Respostas:

7

AFAIK, VBO deve ser capaz de fazer o trabalho, mas eu não tentei excluir os comentários.

Outra maneira é executar algum código (em um módulo ou no bloco 'execute php' do módulo Devel) que obtém uma lista de todas as consultas do db, cria uma matriz dos IDs de comentários e passa essa matriz para a função comment_delete_multiple . Observe que isso pode demorar um pouco para ser concluído (dependendo do desempenho do servidor e do número de comentários); portanto, você pode contornar isso, por exemplo, usando set_time_limit (http://php.net/manual/en/function .set-time-limit.php) ou API de lote do Drupal.

[atualização: veja a resposta de Chris Cohen, por exemplo, código com base nessa abordagem.]

Marcvangend
fonte
7

Esta não é uma resposta alternativa, mas uma elaboração sobre a de Marcvangend, mas não pude comentar sua resposta e deixar um exemplo de código. Portanto, a abordagem manual, usando o bloco de código de execução do devel, se pareceria com:


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

comment_delete_multiple($cids);

Como assinala Marcvangend, isso será limitado ao tempo de execução no servidor, portanto, você precisará aumentá-lo temporariamente se tiver muitos comentários. Obrigado a manarth e instanceofjamie pela assistência ao dbtng.

Chris Cohen
fonte
1
Obrigado pela direção, mas sua sintaxe está desativada. A tabela é comment: você precisa de um alias e os resultados do objeto bruto não podem ser alimentados diretamentecomment_delte_multiple
brian_d 15/11
@brian_d como você processaria os resultados do objeto bruto prontos para comment_delte_multiple ()?
jackocnr
2

Pessoalmente, eu iria para o módulo Views Bulk Operations .

Este módulo aumenta as visualizações, permitindo que operações em massa sejam executadas nas linhas exibidas. Isso é feito mostrando uma caixa de seleção na frente de cada nó e adicionando uma caixa de seleção contendo operações que podem ser aplicadas. Ações Drupal Core ou Rules podem ser usadas.

Karl Jóhann
fonte
0

Honestamente, quando eu precisava fazer isso, fiz no banco de dados. Você exclui os comentários, corrige as estatísticas e os comentários, todos os comentários desaparecem. Eu evitaria fazer isso se você tiver módulos interagindo com os comentários de alguma maneira estranha, caso contrário, é o que eu sugeriria.

TRUNCATE TABLE comentários

UPDATE node_comment_statistics SET comment_count = 0

G.Martin
fonte
Eu acho que a vantagem de usar a chamada da API drupal comment_delete_multipleé que ela pode chamar ganchos adicionais do drupal para você, deixando seu DB potencialmente mais limpo.
22411 brian_d
É por isso que eu disse que sugiro evitar isso se você tiver módulos interagindo com os comentários. Caso contrário, se você tiver comentários sobre ações, nunca notei nenhum problema. É certamente muito mais fácil se você tiver um site que recebeu spam com milhares de comentários.
G.Martin
Você também precisa truncar a tabela 'field_data_comment_body', pois é aí que o conteúdo dos comentários é armazenado.
Creynders
0

Algumas ferramentas da interface do usuário Você pode instalar os módulos abaixo

Visualizações - drupal.org/project/views

Todo site Drupal precisa, acredito ... Ele gera SQL no back-end e exibe resultados com configurações configuráveis, filtros, classificação, paginação ... etc

VBO - http://drupal.org/project/views_bulk_operations Para permitir operações em massa (por exemplo, excluir comentários para este segmento)

Visualizações de administração - http://drupal.org/project/admin_views Aproveite as vantagens do Views e do VBO, substitua o conteúdo original, comentário, páginas de administração do usuário por menu_alter ...

  1. Após ativar os módulos acima, volte à página de administração do comentário
  2. Marque selecionar tudo ( tenha cuidado , verifique se você deseja excluir todos os comentários ...)
  3. Selecione "Excluir" e "Enviar" ( tenha cuidado , não há mais botão de confirmação mais tarde ...)
Ck Poon
fonte
0

Conseguiu excluir cerca de 45.000 comentários usando o módulo Backup e Migrar. Na configuração avançada em 'Excluir os dados das tabelas a seguir' - primeiro pressione a tecla Ctrl e selecione o comentário na lista - (tenha cuidado porque aqui as tabelas de cache desnecessárias já estão selecionadas) - backup - restaure deste arquivo de backup. Viva!

VivMajor
fonte
0

Essa resposta é semelhante a uma resposta já listada, mas eu a modifiquei para evitar um 'erro de falta de memória' em cerca de 27.000 comentários. Isso levará um tempo para ser executado, dependendo do número de comentários. Simplesmente truncar a tabela de comentários pode não ser uma boa ideia; é melhor deixar o Drupal lidar com a exclusão de conteúdo.

Eu criei um script PHP:

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

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

... então rodou o script com Drush

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

Normalmente, eu recomendaria usar o VBO para excluir comentários ou nós em massa, mas se você estiver em uma situação em que tiver centenas de milhares de comentários e não tiver muito tempo, aqui está uma consulta sql que excluirá todos os comentários não aprovados junto com todas as revisões e dados relacionados aos comentários que, no meu caso, estavam ocupando 1,2 GB de espaço no 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
Octan
fonte
-2

Habilite o filtro PHP e crie uma página básica com o seguinte código:

<?php
  db_query("TRUNCATE TABLE {comment}");
  db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>
jordi
fonte
1
nunca use filtro de PHP para coisas como que (mesmo para qualquer outra coisa, filtro de PHP é geralmente uma das piores idéias em Drupal)
Alejandro Moreno