Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
[RESOLVIDO]
WHERE usuarios.login=perfil.login AND perfil.login=servicos.login AND usuarios.login = "LOGIN_A_SER_EXCLUIDO"
[RESOLVIDO]
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!
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
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 tabelatabela --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
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.
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 ).
Olá Victor Cometti, eu sou meio ruim de php...
To "viajando na maionese" agora.
você pode "explicar para leigo"?
Obrigado!
O que que você não entendeu??
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