• Twitter
  • GitHub
  • Flickr
  • Skype
  • Contato

Blog

Docker containers para aplicações PHP usando Nginx, PHP7-FPM, MariaDB e phpMyAdmin: Olá! Estou de volta e abraçado à portabilidade. Tudo a ver com o assunto de hoje.  ...

Delete comentários usando Drush e SQL

Drush é um shell de linha de comando e interface de script Unix para a plataforma Drupal, uma ferramenta poderosa para executar tarefas administrativas do Drupal. Neste post, passo um exemplo básico de como executar SQL simplesmente entrando no diretório principal do projeto, o Drush se encarrega em verificar os dados de acesso a base, que são definidos no arquivo settings.php em sites/default/. Veja como instalar o Drush: Drush.org e também em Digitalocean.com.
Aqui passo dicas de como realizar backup específico de uma única tabela e deletar comentários.

Nota: Para um developer mais SAGAZ nas modularizações, use um módulo esperto. Brincadeirinha... Lembrando, há sempre um módulo para resolver seus problemas, faça uma boa pesquisa no repositório de módulos do Drupal. ok? capiche? ;)

No terminal, estando no diretório do projeto, limpe o cache e realize o backup do banco utilizando os comandos cc(clear cache all) sql-dump do Drush.

$ drush cc all
$ drush sql-dump --result-file=~/backup.sql

Agora, sendo mais específico, poderíamos somente realizar o backup da tabela 'comment', que receberá alterações via SQL.

$ drush sql-dump --result-file=~/tabela-comment.sql --tables-list=comment

Para elucidar melhor e seguir adiante, vamos rodar um SQL desc(describe) que fornece informações sobre as colunas de uma tabela, no nosso caso 'comment'. Usaremos o comando sqlq(alias do comando sql-query) do Drush.

$ drush sqlq "desc comment"
 
Field   Type    Null    Key     Default Extra
cid     int(11) NO      PRI     NULL    auto_increment
pid     int(11) NO      MUL     0
nid     int(11) NO      MUL     0
uid     int(11) NO      MUL     0
subject varchar(64)     NO
hostname        varchar(128)    NO
created int(11) NO      MUL     0
changed int(11) NO              0
status  tinyint(3) unsigned     NO              1
thread  varchar(255)    NO              NULL
name    varchar(60)     YES             NULL
mail    varchar(64)     YES             NULL
homepage        varchar(255)    YES             NULL
language        varchar(12)     NO

Então iremos listar os campos de nossa escolha, no caso os campos: assunto, id do comentário e id do post.

$ drush sqlq "SELECT subject, cid, nid FROM comment"
 
subject cid nid
lorem ipsum spam 1 100
lorem ipsum spam 2 100
...
lorem lorem lorem 15 111
...
lorem lorem lorem 77 177

Vamos refinar e selecionar somente os comentarios do post 100.

$ drush sqlq "SELECT subject, cid FROM comment WHERE nid=100"
 
subject cid
lorem ipsum spam 1
lorem ipsum spam 2
...
Não é um spam 8
Não é um spam 9
lorem ipsum spam 10
...

Posso usar o operador BETWEEN para deletar valores dentro de um intervalo, com exceção para os comentários 8 e 9(Não é um spam)

Então...

$ drush sqlq "DELETE FROM comment WHERE (cid BETWEEN 1 and 10) AND NOT cid IN (8,9)"

;) [],s