Ir para conteúdo

POWERED BY:

Arquivado

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

Mariana_Cicarelli

usando o cascade!

Recommended Posts

gente!!!

 

socorro!!!

 

Estou querendo apagar os registros de duas tabelas relacionadas...Catei , catei na net e cheguei ao efeito Cascade que agente adiciona em uma chave estrangeira , pra quando for apagar o registro de uma tabela apagar o da que está relacionada...

 

então...O negócio não funfa...provavelmente porque não estou sabendo fazer a string de exclusão no código...

 

me ajuda galera???

 

tô empacada nisso!!!

 

Bitoocaaas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta ai a instrução DDL da criação das tabelas envolvidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse foi o código que usei pra criar as tabelas do bd... eu usa phpmyadmin

 

CODE
create table rcGalerias(

`idFotos` int(11) NOT NULL auto_increment,

`galeria` varchar(200) NOT NULL,

`miniatura` varchar(255) NOT NULL ,

`data` varchar(100) NOT NULL ,

PRIMARY KEY (`idGaleria`)

);

 

 

 

create table rcFotos(

`idFotos` int(11) NOT NULL auto_increment,

`idGaleria` int(11) NOT NULL,

`fotos` varchar(255) NOT NULL,

`legenda` varchar(255) NOT NULL,

PRIMARY KEY (`idFotos`),

key (idGaleria),

foreign key(idGaleria) references rcGalerias(idGaleria) on delete cascade on update rcGalerias

);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso:

foreign key(idGaleria) references rcGalerias(idGaleria) on delete cascade on update rcGalerias
acho que é assim:

foreign key(idGaleria) references rcGalerias(idGaleria) on delete cascade on update cascade
Posta ai a sequencia de comandos para a deleção, de preferencia sem os códigos php, só as querys mesmo. E se dá erro, qual o erro apresentado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então é justamente essa parte que não sei fazer...

Quando vamos excluir um registro apenas de uma tabela, eu até sei fazer beleza! Mas nesse caso são duas relacionadas...Como faço??? Eu uso joins???

 

:rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apaga da galeria, que automaticamente as fotos dela serão apagadas.

 

Vou explicar:

foreign key(idGaleria) references rcGalerias(idGaleria) on delete cascade on update cascade.

Você está dizendo isso:

 

chave estrangeira idGaleria faz referência ao campo idGaleria da tabela rcGalerias. Quando na tabela rcGaleria for excluído um registro que tiver um idGaleria na tabela corrente, excluí arqui também. Quando for atualizado na tabela rcGalerias (alterado o id) altera na tabela corrente também.

Nota: acredito que você não conseguiu criar as tabelas com o comando que mostrou, porque há referencia a um campo que não existe na tabela "pai" (o campo idGaleria não existe na tabela rcGalerias)

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE TABLE rcGaleria (
  id_galeria INT(11) NOT NULL AUTO_INCREMENT,
  id_foto INT(11) NOT NULL,
  galeria VARCHAR(200) NOT NULL,
  miniatura VARCHAR(255) NOT NULL,
  data DATE NOT NULL,
  PRIMARY KEY(id_galeria)
)
TYPE=InnoDB;

CREATE TABLE rcFoto (
  idFoto INT(11) NOT NULL AUTO_INCREMENT,
  id_galeria INT(11) NOT NULL,
  foto VARCHAR(255) NOT NULL,
  legenda VARCHAR(255) NOT NULL,
  PRIMARY KEY(idFoto),
  INDEX FKIndex(id_galeria),
  FOREIGN KEY(id_galeria)
	REFERENCES rcGaleria(id_galeria)
	  ON DELETE CASCADE
	  ON UPDATE CASCADE
)
TYPE=InnoDB;

fiz um exemplo de como deve ser + ou - uma tabela de rrelacionamento 1 para muitos, será este seu caso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Márcio!!!

 

eu tenho sim o idGaleria na tabela pai... eu que digitei errado hehehehehehe.

 

vou postar aí em baixo oq tenho até o momento código de exclusão...

socorro!!!

CODE

$id = $_POST['idGaleria'];

$query = "DELETE FROM rcGalerias WHERE idGaleria=$id";

mysql_query($query);

$totalAfetado = mysql_affected_rows($con);

if ($totalAfetado != 1 )

{

echo"<p>Problemas na exclusão!</p>";

}

else

{

echo "<b>OK!</b> A galeria foi excluída com sucesso!</br>";

}

 

mesmo com o cascade no bd só apaga o registro da tabela pai... Por isso perguntei se a string de exclusão é feita de forma diferente no caso de tabelas relacionas...

 

puxa q puxa!!!

 

bitocaas

 

Oi Márcio!!!

 

eu tenho sim o idGaleria na tabela pai... eu que digitei errado hehehehehehe.

 

vou postar aí em baixo oq tenho até o momento código de exclusão...

socorro!!!

CODE

$id = $_POST['idGaleria'];

$query = "DELETE FROM rcGalerias WHERE idGaleria=$id";

mysql_query($query);

$totalAfetado = mysql_affected_rows($con);

if ($totalAfetado != 1 )

{

echo"<p>Problemas na exclusão!</p>";

}

else

{

echo "<b>OK!</b> A galeria foi excluída com sucesso!</br>";

}

 

mesmo com o cascade no bd só apaga o registro da tabela pai... Por isso perguntei se a string de exclusão é feita de forma diferente no caso de tabelas relacionas...

 

puxa q puxa!!!

 

bitocaas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual SGBD e versão você usa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observe estes dois pontos:

 

1º) Esta versão do MySQL não oferece suporte a Integridade Relacional. Achei isso num outro fórum, mas experimente perguntar no fórum de MySQL: acho que lá é o lugar mais indicado.

2º) As tabelas devem ser criadas com uma engine que ofereça tal funcionalidade. Eu sempre uso tabelas InnoDB para isso.

Assim:

create table tabela (id int, nome char ...)TYPE=InnoDB;

Poste ai as conclusões.

Compartilhar este post


Link para o post
Compartilhar em outros sites

márcio!!!

 

não sei se fui pelo caminho certo mas funcionou! eeeeeeeeeeeee!!!

 

Segue o código:

 

CODE
$id = $_POST['idGaleria'];

$query = "DELETE rcGalerias.*, rcFotos.* FROM rcGalerias, rcFotos WHERE rcGalerias.idGaleria=$id AND rcFotos.idGaleria=rcGalerias.idGaleria";

mysql_query($query);

echo "<b>OK!</b> A galeria foi excluída com sucesso!</br>";

 

viagei muito na batatinha????

 

 

 

huuuuuummmm

 

as minhas tabelas estão todas em MyIsam... em Innobd é melhor... Esses detalhes mais profundos ainda viajo um pouco...

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

É deu certo... mas você abriu mão do controle de integridade relacional...

Tabelas MyISAM não implementam esta funcionalidade.

 

Porque você não aproveita que a gente tá te dando uma força, e altera elas pra InnoDB ?? http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

É deu certo... mas você abriu mão do controle de integridade relacional...

Tabelas MyISAM não implementam esta funcionalidade.

 

Porque você não aproveita que a gente tá te dando uma força, e altera elas pra InnoDB ?? http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

A inno é melhor de trabalhar né???

 

Vou trocar a configuração então!!!!!

 

Brigadão Márcio!!!!

 

Me ajudou pra caramba!

 

bitocas

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.