Deletando dados em várias tabelas ao mesmo tempo

1,051 views
Skip to first unread message

Leo Baiano

unread,
Jul 13, 2008, 10:21:23 AM7/13/08
to php-b...@googlegroups.com
PessoALL,

Em primeiro lugar gostaria de me apresentar, meu nome é Leo Baiano
(apelido claro...rs) e sou novo na área de programação para WEB, vou
dando minhas cabeçadas aqui e ali e no maior estilo POG vou
conseguindo me virar.

Chego logo com um problema que gostaria que me ajudassem a resolver,
tenho uma tabela onde cadastro cursos, outra onde cadastro os
professores do curso e outra onde cadastro as disciplinas do curso.

Na edição de Curso eu criei um botão para excluir o curso e gostaria
de excluir por completo o registro em toda base de dados, não só na
tabela curso. Tenho um campo chamado id_curso nas tabelas professores
e disciplinas, este campo recebe o valor ID do curso correspondente e
através dele tentei a seguinte solução:

$registro = $_GET["registro"];
if (!$registro == '') {
include "conect.php";
$sql = "DELETE FROM curso WHERE id='$registro'";
$sql1 = "DELETE FROM disciplinas WHERE id_curso='$registro'";
$resultado = mysql_query($sql)
or die (mysql_error());
$resultado1 = mysql_query($sql1)
or die (mysql_error());
}

Desta forma consigo excluir mas como podem ver foi uma gambiarra... eu
poderia utilizar deste mesmo artificio e repetir o código assim:

$sql2 = "DELETE FROM professores WHERE id_curso='$registro'";
$resultado2 = mysql_query($sql2)
or die (mysql_error());

E pronto, ao clicar no botão de deletar automaticamente apagaria os
dados do curso nas 3 tabelas, já fiz o teste e deu certo mas o
problema é que imagino que esta não é a forma correta de se fazer pois
suja demais o código e o torna complicado quando é necessário apagar
os registros relacionados em várias tabelas. No meu caso citei apenas
3 tabelas mas na verdade tenho outras como, alunos, projetos, linhas
de pesquisa, área de concentração....

Bom, com relação ao DELETE na tabela curso creio que teria de ser
separada pois o campo a ser pesquisado para deletar é ID e em todas as
outras é ID_curso, então imaginei ser possivel fazer assim:

$registro = $_GET["registro"];
if (!$registro == '') {
include "conect.php";
$sql = "DELETE FROM curso WHERE id='$registro'";
$sql1 = "DELETE FROM disciplinas, professores, alunos, linhas de
pesquisa WHERE id_curso='$registro'";
$resultado = mysql_query($sql)
or die (mysql_error());
$resultado1 = mysql_query($sql1)
or die (mysql_error());
}

Separando por virgula o nome das tabelas...

Bem, não apagou e ainda retornou um erro de sintaxe.

Então a pergunta que faço é, como posso apagar dados de várias tabelas
utilizando apenas uma expressão?

--
Amplexos,

Leo Baiano
www.blog.ljunior.com

Roberto C. Silva

unread,
Jul 14, 2008, 7:10:17 AM7/14/08
to php-b...@googlegroups.com
Leo, vc esta usando InnoDB ou MyISAM?

Porque se você estiver usando o innoDB você pode definir nos relacionamentos das tabelas que a ação deletar seja em cascata, desta forma quando você excluir algum registro da tabela "pai" no seu caso tabelas "curso", o sgbd eliminará os registros, refereste ao registro excluido, das tabelas filhos ("disciplinas" e "professores").

Esta seria uma solução!!

[]s





2008/7/13 Leo Baiano <ljuni...@gmail.com>:



--
Roberto C Silva

Renato Mendes

unread,
Jul 13, 2008, 2:22:35 PM7/13/08
to php-brasil
ai rapaz tente colocar uentre parenteses tipo

$registro = $_GET["registro"];
if (!$registro == '') {
include "conect.php";
$sql = "DELETE FROM curso WHERE id='$registro'";
$sql1 = "DELETE FROM (disciplinas, professores, alunos, linhas de
pesquisa) WHERE id_curso='$registro'";
$resultado = mysql_query($sql)
or die (mysql_error());
$resultado1 = mysql_query($sql1)
or die (mysql_error());

}

abraço

Christiano

unread,
Jul 14, 2008, 5:26:45 AM7/14/08
to php-brasil
EU faria assim:
DELETE a, b, c FROM curso a, disciplinas b, professores c WHERE
a.id='$_GET["registro"]' AND a.id=b.id_curso AND a.id=c.id_curso
Reply all
Reply to author
Forward
0 new messages