Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas Medina

DELETE em entradas que pertencem a mais de um critério?

Recommended Posts

Opa!

 

Então, estou tentando realizar uma query onde o objetivo é remover entradas no banco, que correspondem a duas categorias.

Estou fazendo da seguinte maneira:

DELETE tabela_teste FROM tabela_teste
INNER JOIN categorias
ON categorias.idCategoria = tabela_teste.idCategoria
WHERE categorias.nome = 'Erros'
OR categorias.nome = 'Testes'

A query deveria remover as entradas de tabela_teste que pertencem às categorias 'Erros' e 'Testes'.

Através do PhpMyAdmin, a query funciona sem problemas.

Entretanto, ao utilizar num arquivo PHP, a query também acontece, mas somente removendo as entradas na categoria 'Testes':

$sql = "DELETE tabela_teste FROM tabela_teste
        INNER JOIN categorias
        ON categorias.idCategoria = tabela_teste.idCategoria
        WHERE categorias.nome = 'Erros'
        OR categorias.nome = 'Testes'";

$query = mysqli_query($conexao, $sql
if ($query) {
   echo "Feito!";
} else {
   echo "Erro na operação";
}

Alguém sabe se existe algum bug, ou se pode estar havendo algum problema na query, que faça com que ela não execute completamente quando através do PHP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá! Para você fazer um teste dê um var_dump($sql), e com o resultado faça direto no PHPMyadmin campo "SQL". Se der erro é na sua query, se não é o PHP mesmo. Uma coisa, você esqueceu de fechar o parêntese da mysqli_query. Faça isso e poste o retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí, cara?

Obrigado por responder :D

 

Você deu uma excelente ideia! Nunca tinha pensado em depurar exibindo o comando SQL!

Bem, de qualquer forma, fiz exatamente isso, a query executa removendo somente os da categoria 'Testes'.

 

Quando eu copio a query exibida no var_dump, e executo na aba SQL do phpMyAdmin, ele remove as da categoria 'Erros', que não haviam sido removidas antes.

 

É esquisito.. deveria funcionar normalmente, parece que a query não vai funcionar no PHP usando o OR, ou IN para agrupar as categorias e excluir o conteúdo que pertence a elas. Também tentei diretamente pelo ID, mas o resultado é o mesmo.

 

Será que existe alguma forma de contornar isso?

 

OBS.: Quanto ao mysqli_query(), foi só minha transcrição que estava errada, rsrs. Está tudo certinho no código!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Select id

FROM tabela_teste

INNER JOIN categorias ON categorias.idCategoria = tabela_teste.idCategoria

WHERE categorias.nome in ('Erros' ,'Testes')

Having count(*) >=2

 

Deve retornar as chaves da tabela que tem as duas categorias em categorias, creio ser uma base melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Me desculpem pela demora..

 

Select id

FROM tabela_teste

INNER JOIN categorias ON categorias.idCategoria = tabela_teste.idCategoria

WHERE categorias.nome in ('Erros' ,'Testes')

Having count(*) >=2

 

Deve retornar as chaves da tabela que tem as duas categorias em categorias, creio ser uma base melhor.

 

Bem, usando a query que você passou, eu acabo encontrando somente um resultado.

Removendo a última linha, da instrução having count, os quatro resultados são exibidos, 2 para cada categoria.

 

Também tentei alterar o operador relacional, colocando > 2, > 0, mesmo assim, só era exibido 1 resultado.

 

O engraçado é, se eu tento excluir separadamente, com duas querys, vai sem problemas.

Se eu tento excluir todas as entradas na tabela(contando com as que nao fazem parte dessa categoria), também não encontro problema nenhum.

O problema só acontece quando preciso deletar itens de mais de uma categoria.

 

Será que uma subquery poderia resolver o problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.