Avatar billede bjornhart Nybegynder
13. marts 2002 - 14:48 Der er 11 kommentarer og
1 løsning

Relation mellem 2 tabeller

Hej
Jeg har et lille problem som jeg gerne vil have løst. I min database har jeg en tabel "person" med personlige oplysninger, og vil gerne have en anden tabel "type" kædet sammen via primærnøglen i "person" tabellen.
Desværre har jeg i tidernes morgen lavet primærnøglen i person som et autonummeringsfelt, hvilket gør det lidt svært at lave relationen mellem de 2 tabeller.
Jeg kan godt fuske mig til at lave relationen, ved at angive et navn i person tabellen som svarer til klokken+nogle karakterer indsætte posten i "person" tabellen, for derefter at søge i "person" tabellen efter navnet klokken+nogle karakterer og få ID'en på den record. Dette Id kan jeg så bruge i "type" tabellen.
Kan det gøres smartere? eller må jeg acceptere denne fremgangsmåde fordi jeg lavede primærnøglen som et autonummeringsfelt?
Avatar billede kobbernagel Nybegynder
14. marts 2002 - 09:33 #1
Jamen det er da en god ide at lave primær nøglen som et autonummeringsfelt. Det gør jeg da altid. Du kan enten tilføje et felt i person som hedder TypeID, eller tilføje et felt i Type som hedder PersonID, og kæde de 2 felter sammen. Så skal du bare sørge for at fylde "ID" nummeret over i dette felt, for den person, som er den givne type. Hmm. Det lyder da lidt snørklet. Sig til hvis du skal have forklaring, eller hele koden?
Avatar billede bjornhart Nybegynder
14. marts 2002 - 11:02 #2
Fremgangsmåde som du beskriver er også den jeg bruger. Problemet er at få id'et over i Type tabellen. Når jeg laver en insert i person tabellen, kender jeg jo ikke personid'et idet det jo bliver talt automatisk op. Det giver jo et problem når jeg vil lave relationen til Type tabellen, da jeg jo skal vide hvilket personid jeg skal sætte ind! Håber du forstår hvad jeg mener
Avatar billede kobbernagel Nybegynder
14. marts 2002 - 11:08 #3
Hvad med:
$sql = "SELECT LAST_INSERT_ID() FROM person";
Avatar billede bjornhart Nybegynder
14. marts 2002 - 11:15 #4
Den kommando kendte jeg ikke, så den vil jeg lige prøve. Kræver den ikke  at man har låst tabellen person?
Avatar billede kobbernagel Nybegynder
14. marts 2002 - 11:44 #5
Nej. Ikke så vidt jeg ved...
Der er nogle flere muligheder, men lad mig høre hvad du fik ud af denne.
Avatar billede bjornhart Nybegynder
14. marts 2002 - 11:50 #6
Hvad hvis der er en anden bruger som sidder og opretter nogle personer, så kan jeg da ikke være sikker på at LAST_INSERT_ID() returnerer det rigtige id?
Avatar billede kobbernagel Nybegynder
14. marts 2002 - 13:24 #7
Ok. Der går 10ms hvor en anden bruger kan taste det ind. Tænkte jeg ikke lige over.

Brug:
$person_id = mysql_insert_id();

isteden for. Den funktion er beregnet til dette formål :)
Avatar billede bjornhart Nybegynder
14. marts 2002 - 14:15 #8
Den sidste funktion kan jeg ikke lige hitte ud af. -Hvor kommer den fra. Kan du ikke vise mig et større kode eksempel? Evt. i ASP måske. På forhånd tak
Avatar billede kobbernagel Nybegynder
14. marts 2002 - 15:16 #9
Ååååh. Jeg troede at du brugte PHP?

Jeg ved ikke hvad tilsvarende funktion hedder i ASP.
$person_id er bare et variabel navn, og mysql_insert_id() er php funktion for at hente det ID som autonummer lige har indsat i MySQL
Avatar billede lundsfryd Nybegynder
14. marts 2002 - 15:16 #10
> Hvad hvis der er en anden bruger som sidder og opretter nogle
> personer, så kan jeg da ikke være sikker på at LAST_INSERT_ID()
> returnerer det rigtige id?

Jo, det kan du. Funktionen knytter sig til den enkelte mysql-session, og derfor vil flere brugere godt kunne benytte systemet samtidigt.
Avatar billede kobbernagel Nybegynder
14. marts 2002 - 15:24 #11
Her er et "live" eksempel i PHP

$insert = mysql_query("INSERT INTO
                            manufactureid(
                            ManufactureName,
                            Telephone,
                            Webadress)
                      VALUES('
                            $ManufactureName',
                            '$Telephone',
                            '$Webadress')");
$ManufactureID = mysql_insert_id();

$insert = mysql_query("INSERT INTO
                          manufacture(
                            ManufacturePartnumber,
                            ManufactureID,
                            ISCPartnumber,
                            PartstatusID,
                            Datasheet)
                          VALUES(
                            '$ManufacturePartnumber',
                            '$ManufactureID',
                            '$ISCPartnumber',
                            '$PartStatus',
                            '$Datasheet')");
Avatar billede bjornhart Nybegynder
12. april 2002 - 13:39 #12
LAST_INSERT_ID() virker!!! tak for det
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