j-- Skrevet 4. juli 2007 Del Skrevet 4. juli 2007 (endret) La oss si jeg har 2 databaser, en med gjenstander og en med personer. Eksempel: PERSONER: | id | navn | gjenstander | | 1 | jens | ? | | 2 | knut | ? | GJENSTANDER: | id | gjenstand | | 1 | kniv | | 2 | gaffel | | 3 | genser | | 4 | bukse | Hvordan får jeg nå til at "jens" viser til at han har både "kniv" og "gaffel", mens "knut" har "kniv" og "bukse" etc.? Vi tenker array i PHP, men det bør jo gjøres i MySQL. Mer entydig blir vel spørsmålet: Hvordan dele opp en mange til mange-relasjon via en mellomtabell? Endret 4. juli 2007 av clvn Lenke til kommentar
Manfred Skrevet 4. juli 2007 Del Skrevet 4. juli 2007 (endret) Personer: pk_id, navn Gjenstander: pk_id, navn Personer_X_Gjenstander: pk_id (auto increment), fk_person_id, fk_gjenstands_id Edit: Grunnen til at jeg har en auto increment pk_id i trans-tabellen er egentlig bare gammel vane. fk_person_id og fk_gjenstands_id kan være sammensatt primærnøkkel om du vil... Endret 4. juli 2007 av Manfred Lenke til kommentar
LordEirik Skrevet 4. juli 2007 Del Skrevet 4. juli 2007 Personer: pk_id, navnGjenstander: pk_id, navn Personer_X_Gjenstander: pk_id (auto increment), fk_person_id, fk_gjenstands_id Edit: Grunnen til at jeg har en auto increment pk_id i trans-tabellen er egentlig bare gammel vane. fk_person_id og fk_gjenstands_id kan være sammensatt primærnøkkel om du vil... 9004476[/snapback] Bare for sikkerhets skyld: Som gjøres ved å legge til denne: "primary key(fk_person_id, fk_person_id)" på slutten av query. Lenke til kommentar
kaffenils Skrevet 4. juli 2007 Del Skrevet 4. juli 2007 Personer: pk_id, navnGjenstander: pk_id, navn Personer_X_Gjenstander: pk_id (auto increment), fk_person_id, fk_gjenstands_id Edit: Grunnen til at jeg har en auto increment pk_id i trans-tabellen er egentlig bare gammel vane. fk_person_id og fk_gjenstands_id kan være sammensatt primærnøkkel om du vil... 9004476[/snapback] Hvis du gjør det på den måten så må du iallefall lage en unique contraint eller index på fk_person_id og fk_gjenstands_id. Lenke til kommentar
j-- Skrevet 5. juli 2007 Forfatter Del Skrevet 5. juli 2007 Takk takk! Fortsetter å jobbe med dette i morgen, så det er veldig mulig at det kommer flere spørsmål ang. relasjonene mellom tabeller. Lenke til kommentar
j-- Skrevet 8. juli 2007 Forfatter Del Skrevet 8. juli 2007 Noen som kan gi eksempel på en spørring der man henter ut alle personer som har en "gaffel" (fra eksempel 1)? Vi kaller tabellen som inneholder relasjonen mellom "personer" og "gjenstander" for "personer_x_gjenstander". (Det er vel her "join" eller "left join" kommer inn?) Lenke til kommentar
Manfred Skrevet 8. juli 2007 Del Skrevet 8. juli 2007 SELECT * FROM Personer RIGHT JOIN Personer_X_Gjenstander ON fk_person_id = Personer.pk_id WHERE fk_gjenstands_id = 2 f.eks? Lenke til kommentar
j-- Skrevet 8. juli 2007 Forfatter Del Skrevet 8. juli 2007 SELECT * FROM Personer RIGHT JOIN Personer_X_Gjenstander ON fk_person_id = Personer.pk_id WHERE fk_gjenstands_id = 2 f.eks? 9032531[/snapback] Ja, dette var akkurat det vi prøvde å få til. Tusen Takk! Lenke til kommentar
kaffenils Skrevet 24. august 2007 Del Skrevet 24. august 2007 Bruk heller en INNER JOIN. RIGHT JOIN gir ingen mening så lenge du filtrerer på RIGHT JOIN tabellen i WHERE delen av spørringen (med mindre du bruker IS NULL i filteret). Dessuten har jeg som leveregel å alltid gi tabeller et alias og prefixe alle kolonner med aliasnavnet. Da unngår du problemer hvis flere tabeller inneholder samme kolonnenavn. SELECT * FROM Personer p INNER JOIN Personer_X_Gjenstander pg ON pg.fk_person_id = p.pk_id WHERE pg.fk_gjenstands_id = 2 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå