Ir para conteúdo

POWERED BY:

Arquivado

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

infonet

[Resolvido] Deletar dados de três tabelas com o mesmo login

Recommended Posts

Oi pessoal, estou tendo problemas ao tentar deletar dados de um mesmo login em três tabelas diferentes, só estou conseguindo excluir de uma por vez... Mas um amigo me passou algo que ele achou na internet, mas não estou conseguindo adaptar, será que alguém poderia me ajudar?

É o seguinte:

TABELA ONDE O USUÁRIO FICA REGISTRADO: usuarios (só uma linha por usuário)

TABELA ONDE O USUÁRIO CRIA PERFIL: perfil (só uma linha por usuário)

TABELA ONDE O USUÁRIO ADICIONA VÁRIOS SERVIÇOS: servicos (várias linhas por usuário)

 

Em todas as tabelas a única coisa em comum é o LOGIN.

 

O CÓDIGO QUE UM AMIGO PASSOU É:

--------------------------------------------------------

<?php

include ("includes/conexao.php");

 

$sql = 'DELETE FROM servicos,perfil,usuarios USING usuarios INNER JOIN perfil INNER JOIN servicos WHERE

usuarios.login=perfil.login AND perfil.login=servicos.login';

 

$resultado = mysql_query($sql)

 

or die ("Não foi possível realizar a exclusão dos dados<p><a href='javascript:window.history.go(-1)'>Voltar");

echo "<br><br><br><br><br><br><br><br><br><br><br><br><center><font face='arial' color='#8CAC0B' style='font-size: 14pt'>O serviço está sendo excluído.<br><br> Aguarde...</center>

<script>top.location.href='index2.php?area=logout&s=<?=$PHPSESSID?>';</script>";

?><body style="text-align: center">

---------------------------------------------------------

O QUE ESTÁ ACONTECENDO:

1- O usuário em questão é excluído, mas o 2º e 3º usuários também NA TABELA USUARIO

2- O usuário em questão é excluído, mas o 2º e 3º usuários também NA TABELA PERFIL

3- Todos os serviços de todos os usuários são excluídos NA TABELA SERVICOS

---------------------------------------------------------

SOCOOOOORRO!!!

Desde já agradeço a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize constraint´s e configure para apagar em todas as tabelas em cascata a partir da foreign key

lembrando que constrainst´s só funcionam em tabelas do tipo INNODB, em MYISAM não funcionam.

 

no manual do mysql

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

[RESOLVIDO]

 

WHERE usuarios.login=perfil.login AND perfil.login=servicos.login AND usuarios.login = "LOGIN_A_SER_EXCLUIDO"

 

[RESOLVIDO]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu pensei que tinha resolvido, mas o problema agora é que a tabela "servicos",

não é OBRIGATORIAMENTE preenchida, o usuário pode passar o tempo todo sem

preenchê-la e depois querer excluir seu login... e ae, como fica... rsrs

É AE QUE A "PORCA TORCE O RABO"!

 

Neste tópico, onde coloquei resolvido, só funciona se o usuário estiver nas

três tabelas, mas se ele só estiver em duas (OBRIGATÓRIO: "usuario" e "perfil"),

não roda e nada acontece, nada é excluído!

 

Alguém pode me ajudar?

Desde já, agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Delete os dados tabela por tabela de acordo com o login passado ou pelo menos a que não é obrigatória precisa ser excluída a parte

Compartilhar este post


Link para o post
Compartilhar em outros sites

no post #2 citei constraint, você apaga o registro em uma tabela e configura para os registros em outras tabelas que tiverem relação com ela na foreign key apagarem automaticamentre, o banco apaga elas em cadeia. dê uma lida

 

um exemplo

 

CONSTRAINT --crie restrição
  `nome_constraint` --com nome nome_restrição
FOREIGN KEY --chave extrangeira
  (`id_tabela_principal`)  --nome da chave extrangeira
REFERENCES --que referencia a
  `tabela_principal`(`id`) --tabela_principal na coluna id
ON DELETE --ao apagar 
CASCADE --apague todos relacionados ao id especificado, efeito cascata

 

resumindo: Apagando na tabela principal, a tabela onde você colocar essa constraint vai apagar tudo que tiver com id da tabela principal

para adiciona essa constraint em uma tabela já criada segue

alter --altere 
table --a tabela
`tabela` --nome da tabela
add --adicione

em seguida a constraint

 

Sempre observando o detalhe que tabelas do tipo MYISAM não funcionam, para tal use tabelas do tipo INNODB

 

qlqr dúvida, à disposição

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Victor Cometti... obrigado, mas...

a tabela usuarios tem id e gera um login que a tabela perfil lê e não tem id,

mas a tabela servicos tem id próprio e lê o login das outras,

para cada serviço cadastrado na tabela servicos, é gerado um id,

mas o login se repete quantas vezes forem necessários.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas se são tabelas relacionadas tinham que haver uma relação entre elas com chave estrangeira, vejo que todas tem login.

Esse recurso do banco de dados elimina a inconsistência( linhas a mais ou linhas com referências inexistentes ).

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.