Avatar billede martinfrost Nybegynder
14. oktober 2005 - 12:00 Der er 7 kommentarer

Nedarvning / insert

Hej eksperter!

Jeg har et lille problem ang. noget "nedarvning" i MySQL. Jeg tror, jeg vælger "medie-eksemplet", som jeg har set omtalt tidligere herinde.

Vi har f.eks. en tabel "Medie" som indeholder:

MedieID, MedieNavn, MedieType

Derudover har vi en masse "sub-tabeller", som kunne være f.eks. "VHS bånd", "DVD'er" og "CD'er".

Hver af disse undertabeller har et MedieID, som refererer til basistabellens MedieID - altså en foreign key til MedieID i tabellen "Medie".

MedieID i basisklassen er auto-increment.

Nu ønsker, jeg er indsætte et nyt medie i databasen.

  Insert into Medie(MedieNavn,MedieType) values('Min film','VHS')

For nu at kunne referere til Medie-tabellen i "VHS"-tabellen, skal jeg huske at hente "Last insert-id" ud af databasen. Det er ikke noget problem. Lad os antage at det auto-genererede ID var "20" - så kan jeg nu skrive:

  Insert into VHS(MedieID,Spilletid,Position) values(20,120,1)


Jeg synes bare, at det er så uhyggelig grimt. Jeg vil gerne kunne indsætte af én gang, så jeg ikke skal hente det auto-genererede ID ud først og dernæst udføre en NY query for at indsætte "resten" af mit medie.

Der må findes en pænere løsning til dette problem? :)

Mvh
Martin
Avatar billede erikjacobsen Ekspert
14. oktober 2005 - 12:12 #1
Insert into Medie(MedieNavn,MedieType) values('Min film','VHS')
Insert into VHS(LAST_INSERT_ID(),Spilletid,Position) values(20,120,1)

LAST_INSERT_ID() henter det for dig
Avatar billede arne_v Ekspert
14. oktober 2005 - 13:34 #2
erik - det mener du ikke !!!!

:-)
Avatar billede arne_v Ekspert
14. oktober 2005 - 13:35 #3
Insert into VHS(MedieID,Spilletid,Position) values(LAST_INSERT_ID(),120,1)
Avatar billede arne_v Ekspert
14. oktober 2005 - 13:36 #4
og det er iøvrigt langt fra sikker at den her løsning er den optimale på
et principielt uløseligt problem
Avatar billede martinfrost Nybegynder
14. oktober 2005 - 16:04 #5
Lidt kønnere blev det jo, men ja... jeg synes bare, at det må være et velkendt problem, der findes en smukkere løsning på :)
Avatar billede erikjacobsen Ekspert
14. oktober 2005 - 16:31 #6
Nej, det mente jeg nok ikke ;) 

Løsningen er den "eneste" mulige med et autoincrement felt. Men med LAST_INSERT_ID() er det jo kun een gang man kan bruge den, i hvert fald hvis den næste tabel også har et autoincrement felt.

Ellers kan du lave nøgler på forhånd.
Avatar billede arne_v Ekspert
04. november 2005 - 19:13 #7
all set ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester