Ir para o conteúdo
N3lson

Insert e Update Foreign Keys

Mensagens Recomendadas

N3lson

Boas, desculpem o incómodo mas poderiam-me indicar como fazer o seguinte:

Tenho 2 tabelas relacionadas entre si

soc -> id (auto_increment, primary), nome, numero

soc_i ->id (auto_increment), soc_id(primary), comt

O que estava a pretender fazer era na tabela soc possuir os dados de socio e na tabela soc_id possuir os comentários das quotas acerca desse socio onde tenho esta relação soc.id <-> soc_i.soc_id

Gostaria de uma query que fizesse esse update e insert.

Obrigado

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ark15

No Inserir :

inseres na tabela Soc_id , o id do socio. e o comentário que desejas.

-> Insert into socio_id values (id , id_socio , comt)

No update:

Fazes update na tabela Soc_id, atraves do id. ( Mas aqui tens varias maneira, depende de como vais implementar.)

-> UPDATE socio_id SET comt = "comentario" WHERE id = XX

pode ter erros! Mas não podes querer a papa toda feita

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Sim, eu sei mas o que pretendo é quando inserir um novo sócio colocar o id tb na tabela soc_id em simultaneo


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Eu coloquei comentários como exemplo, o que eu pretendo é algo identico

Deste género para ser mais específico, imaginemos uma oficina automóvel, onde teria 2 tabelas uma para colocação das matriculas, carro, dono, e outra para colocação de observações de manutenção

Ficava a tabela de observações apenas para observações e nada mais, observações estas que iriam ser depoendentes do veiculo, ficando assim com um registo de todas as manutenções efectuadas.

Desculpem se não me fiz entender, mas é algo deste género k pretendia, daí o relacionamento.

E imaginem que quero adicionar um registo de matricula novo, iria juntamente adicionar o comentário á tabela informações com o ID do veiculo registado.

Se souberem uma outra forma de fazer isso agradecia a ajuda

Obrigado


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

continua a não ser o mais correcto

se os dados a serem inseridos tiverem uma relação 1-para-1 com um outro registo o normal será efectuar a normalização de meter tudo no mesmo sítio. existe casos em que é necessário deixar noutra tabela, mas este, definitivamente, não é um desses.

se o problema é ter vários registos relacionados com o objecto, o normal é fazer sempre em dois passos. um é a criação do objecto, e o segundo é a criação do registo relacionado (onde mais tarde se poderá criar novos registos relacionados)


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Então se não for incómodo como farias nesta situação ?

Tabela veiculo

- Marca - Modelo

- Matricula

- Proprietário

- Data Manutenção

- Manutenção

-> coloco a manutenção e a data fazendo o update ?

Eu queria registos independentes


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

se +retendes ter várias <datas de manutenção>/<manutenção>, sim, necessitas de ter registos separados

e como te disse, isso é feito em passos separados


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

se +retendes ter várias <datas de manutenção>/<manutenção>, sim, necessitas de ter registos separados

e como te disse, isso é feito em passos separados

Sim pretendo ter vários registos...

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

exemplo, não posso dar ... não faço ideia que tipo de tecnologias estas a usar para persistência de dados

apresenta o código que tens


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Faço o select desta forma

Exemplo

$busca ="SELECT * FROM veiculo INNER JOIN manutencao WHERE veiculo.matricula= manutencao.matricula";

$busca = mysqli_query($con, $busca);

while($row = mysqli_fetch_array($busca, MYSQL_ASSOC))
{
extract($row);
echo $marca. '| ';
echo $modelo. '| ';
echo $matricula. '| ';
echo $obs. '|';
echo "<br>";

}

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Isso é o que eu pretendia saber, independente sigo mesmo método, mas se fosse com tabelas relacionadas como ficaria?

INSERT INTO veiculo (a, b, c, d) VALUES (a, b, c, d)


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

primeiro crias o registo veiculo como tens

se tiveres então de criar um registo relacionado, tens dois casos possíveis

- imediatamente após a criação do registo

- num momento mais tarde

é claro que tens de dar o ID do registo 'viatura' ao registo que vais criar, logo para os dois casos tens que:

- se for imediatamente após a criação do registo, usa a função mysqli_insert_id para descobrir o id dado

- se for mais tarde, tens de fornecer o id de alguma forma


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

poderias me mostrar um script exemplo?

obrigado


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
$sql = "insert into viatura ...";
$db->query($sql);

$id = $db->insert_id();

$sql = "insert into blablabla ...";
$db->query($sql);


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

$sql = "insert into viatura ...";
$db->query($sql);

$id = $db->insert_id();

$sql = "insert into blablabla ...";
$db->query($sql);

OOP (n encaixo mas vai ter de ser) eu uso procedural mas entendi obrigado


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baia

Nao sei se já está resolvido mas vou aqui dar os meus 5 cêntimos.

Existe a função last_insert_id() no MySQL que podes ir buscar o último id inserido numa tabela, e inserir esse id noutra tabela(como chave estrangeira).

Quando chegar a casa coloco aqui um exemplo.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baia

Um exemplo de que estava a falar

CREATE DEFINER=`root`@`localhost` PROCEDURE `insertAlgumaCoisa`(IN parametroA varchar(10), parametroB INT(1),parametroC INT(1))
BEGIN
 INSERT INTO TABELA_1 (colunaA, colunaB, colunaC) VALUES (parametroA, parametroB,parametroC);
 INSERT INTO TABELA_2 (id, colunaA, colunaB) VALUES (LAST_INSERT_ID(),parametroA, parametroB);
END

é uma stored procedure na qual são passados os parametros para a função, e é feito um insert normal numa tabela, e noutra é feito um insert com o id do registo da primeira tabela

Editado por Baia
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Obrigado vou ver se me safo, de momento não vou pegar nisso.

Depois darei feedback

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.