Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

carcleo

CONCAT de querys DELETE?

Mensagens Recomendadas

carcleo

Tenho a seguinte função:

     public function excluir ($idPlano) {         
     
         $string1 = "DELETE FROM planos WHERE idPlano = ".$idPlano;
         $string2 = "DELETE FROM fotos WHERE idPlano = ".$idPlano;
    
         $this->conexao->query($string1);
         $this->conexao->query($string2);
         
     }

Gostaria de fazer algo como:

     public function excluir ($idPlano) {         
     
         $string = "DELETE FROM planos WHERE idPlano = ".$idPlano." CONCAT";
         $string .= "DELETE FROM fotos WHERE idPlano = ".$idPlano;

         return $this->conexao->query($string) ? 1 : 2;
         
     }

Fazer de 2 pesquisas apenas 1.

Tem como isso? 

Meio que um CONCAT...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Vamos por partes.

  1. O concat é para concatenar strings, não é para aplicar a comandos.
  2. O comando delete não é uma pesquisa, não retorna dados, é comando de eliminação.
  3. Tens de fazer um comando de delete por cada tabela onde queres eliminar dados.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo
     public function excluir ($idPlano) {         
     
         $string = "DELETE FROM planos,fotos 
                    USING planos,fotos 
                    WHERE planos.idPlano = fotos.idPlano AND planos.idPlano = ".$idPlano;
                    
         return $this->conexao->query($string);
         
     }


O return é só para saber se a exclusão foi ou não relaizada. No caso, no MySQL retorna 1 ou 2

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Antenção que o USING é uma extensão do MySQL, não é SQL standard.

PS: o PostgreSQL também usa essa extensão.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
3 hours ago, carcleo said:

Eu sei. Mas além do site ser pequeno, não estou usando PDO.

Ninguém falou de pdo... 


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Eu falei de PDO por causa da intercambialidade de bancos distintos!

Editado por carcleo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

Alguma razão para não usar simplesmente as queries separadas?

É que o facto de estar tudo numa query não significa que fique mais rápido (a única possível vantagem que estou a ver é poupares um request à BD, mas também consegues juntar duas queries num request).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Da forma abaixo, APENAS MYSQL, é possível também, se NÃO houver registros na segunda tabela, remove apenas os da primeira.

No exemplo anterior, NÃO excluía de nenhuma tabela!

Fica a dica:

 

     public function excluir ($idPlano) {         
     
         $string = "DELETE planos, fotos FROM planos
                    LEFT JOIN fotos  ON 
                        planos.idPlano = fotos.idPlano
                    WHERE planos.idPlano = ".$idPlano;
                    
         return $this->conexao->query($string);
         
     }

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

no meu tempo, em vez de martelar soluções improváveis e limitadas ao SGBD, era uso normal das FOREIGN KEY's assim como as acções referenciais destas como ON DELETE CASCADE ...

 

mas novamente ... isso era no meu tempo ...

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.