• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

Problemas

6 mensagens neste tópico

Boas..

3 tabelas no qual uma delas é o resultado de uma ligação de muitos para muitos..

essa 3º tabela recebe a chave primária que se vai tornar em chave estrangeira de cada uma das outras tabelas..

ora quando eu no php faço um insert dos valores das outras tabelas esta 3 tabela nao devia ficar preenxida automaticamente ?

do género eu paço IDLIVRO e IDAUTOR para AUTORIA , visto serem auto increment quando eu acrescentava um livro nao era suposto passar a existir um registo na autoria ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora vamos cá ver ser eu percebi a tua dúvida...

Tu tens digamos uma tabela AUTOR, outra tabela LIVRO e outra ainda AUTORIA, e querias que quando inserisses um autor e um livro eles fossem automaticamente inseridos na tabela autoria?

Tanto quanto sei, o MySql não faz isso. O facto de serem chaves estrangeiras só faz com que o MySql não permita inserires IDLIVROs e IDAUTORs na tabela AUTORIA que não existam nas respectivas tabelas. Podes é criar uma Stored Procedure que recebe os campos das tabelas AUTOR e LIVRO e faz o insert nas 3 tabelas.

O auto-increment só é útil para criar automaticamente o IDLIVRO e o IDAUTOR cada vez que inseres um livro e um autor. Exemplo: supondo que tens as tabelas vazias, fazes um insert na tabela LIVRO (sem especificar o IDLIVRO) e ele cria esse livro com o IDLIVRO 1,  se a seguir inserires outro livro já vai ficar com o IDLIVRO 2, e por aí diante.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a falar verdade ? ...

Bem me parecia.. grrr  :wallbash: Ontem foi noitada até ás 6 da manhã á procura disto, enfim !:eek:

Issso da procedure era porreiro , podes me ensinar como faço ??

E se não for com procedure, teria que inserir manualmente os IDS dos LIvros e Autores na Autoria certo ?

Deixo aqui o código que utilizei para criar as 3 tabelas

CREATE TABLE Livro ( TITULO VARCHAR(50) , Edicao INT(5) , Editora VARCHAR(40) , Paginas INT(10), IDLivro INT(5) NOT NULL AUTO_INCREMENT, Ano INT(5), Descricao VARCHAR(255),
PRIMARY KEY(IDLivro)) TYPE=INNODB;

CREATE TABLE Autor ( Nome VARCHAR(50), Apelido VARCHAR(50), IDAutor INT(5) NOT NULL AUTO_INCREMENT,
PRIMARY KEY(IDAutor)) TYPE=INNODB;

CREATE TABLE Autoria( IDAutoria INT NOT NULL AUTO_INCREMENT,
Autoria_Livro INT NOT NULL,
Autoria_Autor INT NOT NULL,
PRIMARY KEY(IDAutoria),
INDEX(Autoria_Livro),
FOREIGN KEY(Autoria_Livro)
REFERENCES Livro(IDLivro)
ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX(Autoria_Autor),
FOREIGN KEY(Autoria_Autor)
REFERENCES Autor(IDAutor)) TYPE=INNODB;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gurzi, a tabela de relações nunca é preenchida automaticamente. Repara que o MySQL (ou qualquer outro SGBD) não adivinha quais as relações que o utilizador da aplicação pretende.

O que tens de fazer é simples, seja por código a partir da aplicação ou num SP:

1. Inserir os dados nas tabelas que vão ser relacionadas.

2. Inserir as relações na tabela que efectua a relação M:N.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, julgava que elas automaticamente eram inseridas, já resolvi a situação. gracias  :D!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, julgava que elas automaticamente eram inseridas, já resolvi a situação. gracias  :D!

Estamos cá para ajudar e sermos ajudados. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora