infonet 1 Denunciar post Postado Agosto 26, 2011 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
Victor Cometti 8 Denunciar post Postado Agosto 26, 2011 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
infonet 1 Denunciar post Postado Agosto 26, 2011 [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
infonet 1 Denunciar post Postado Agosto 31, 2011 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
Mário Monteiro 179 Denunciar post Postado Setembro 2, 2011 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
Victor Cometti 8 Denunciar post Postado Setembro 2, 2011 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
infonet 1 Denunciar post Postado Setembro 12, 2011 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
Victor Cometti 8 Denunciar post Postado Setembro 13, 2011 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
infonet 1 Denunciar post Postado Setembro 24, 2011 Olá Victor Cometti, eu sou meio ruim de php... To "viajando na maionese" agora. você pode "explicar para leigo"? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Setembro 29, 2011 O que que você não entendeu?? Compartilhar este post Link para o post Compartilhar em outros sites