24. september 2012 - 17:44
Der er
51 kommentarer og 1 løsning
Relationer i mellem databaser
Hey Når man arbejder med relationer i tabeller er der så noget man skal være opmærksom på? Jeg har tænkt mig at oprette 3 tabeller - Udlån, brugere samt produkter. Det skal være sådan at en bruger kan have mange udlån men et produkt kan kun være udlånt til en ad gangen. I tabellern users laver jeg user_ID som primær nøgle. I tabellen products laver jeg product_ID primær nøgle. Jeg er lidt i tvivl omkring primær på udlåns tabellen. -- Udlaan -- user_ID product_ID -- Users -- user_ID username firstname lastname email -- Products -- product_ID productname
Annonceindlæg fra Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
24. september 2012 - 17:47
#1
primaernoeglen skal nok bestaa af begge felter
24. september 2012 - 17:50
#2
Kan man sætte begge som primær?
24. september 2012 - 18:02
#3
Hvornår benytter man innoDB og foreign key?
24. september 2012 - 18:13
#4
Du kan kun have 1 primaernoegle men den kan godt bestaa af flere felter.
24. september 2012 - 18:15
#5
du kan lave 2 foreign key constraints paa din udlaans tabel (en for hver felt) hvis du kan det saa vil MySQL give dig en fejl, hvis du forsoeger at lave et udlaan med en bruger som ikke er i bruger tabellen eller et produkt som ikke er i produkt tabellen - det er godt!
24. september 2012 - 18:32
#6
Hvordan tilføjer det i denne kode? CREATE TABLE IF NOT EXISTS `udlaan` ( `user_ID` bigint(20) NOT NULL, `product_ID` bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
24. september 2012 - 18:34
#7
Skal alle 3 tabeller være af typen innodb?
24. september 2012 - 18:39
#8
alle 3 skal vaere InnoDB
24. september 2012 - 18:40
#9
24. september 2012 - 19:13
#10
Er det sådan her? CREATE TABLE IF NOT EXISTS `udlaan` ( `user_ID` bigint(20) NOT NULL, `product_ID` bigint(20) NOT NULL FOREIGN KEY (user_ID) REFERENCES users(user_ID) FOREIGN KEY (product_ID) REFERENCES users(product_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
24. september 2012 - 19:42
#11
Det ser rigtigt ud.
24. september 2012 - 19:43
#12
Du forventer mange brugere? :-)
24. september 2012 - 19:46
#13
Jeg er bare på den sikre side :)
24. september 2012 - 20:03
#14
Hvid vi nu tager udgangspunkt i følgende: -- Udlaan -- user_ID product_ID -- Users -- user_ID username firstname lastname email -- Products -- product_ID productname Hvordan laver jeg en select som viser de produkter som brugeren med ID 1 har?
24. september 2012 - 20:58
#15
Du joiner de 3 tabeller og saetter en betingelse paa.
25. september 2012 - 16:16
#16
Er denne måde lige så god? select * from Products where product_ID in (select product_id from udlaan where user_id = 1)
25. september 2012 - 16:23
#17
ja men ved visse andre queries vil du vaere noed til at bruge join
25. september 2012 - 16:34
#18
Hvordan ser dette ud? Select * From products Join hvilken-tabel-her on udlaan.user_id = users.user_id Where user_id = 1
25. september 2012 - 16:44
#19
Select * From products Join udlaan on products.product_id = udlaan.product_id Where udlaan.user_id = 1 vil jeg tro.
25. september 2012 - 16:46
#20
Hvad er forkskellen på ovenstående og det man kalder "left join"
25. september 2012 - 16:57
#21
x JOIN y tager alle kombinationer hvor der er matchende raekker i baade x og y x LEFT JOIN y tager alle raekker fra x, hvis der er en matchende raekke i y tages denne eller fyldes der NULL i y kolonnerne
25. september 2012 - 17:07
#22
Super. Hvordan ville select sætningen så se ud hvis jeg havde en yderligere kolonne som hed "productname" og jeg i stedet for "productname" i tabellen "product" havde en kolonne som hed productname_id SÅ jeg henter produkt navnet fra en anden tabel.
25. september 2012 - 17:13
#23
saa joiner du ogsaa den tabel ind
25. september 2012 - 17:25
#25
Hvordan kan de være at du ikke har lavet et eksempel med kun join. Er join og inner join det samme?
25. september 2012 - 17:50
#26
ja
25. september 2012 - 18:06
#27
Joiner jeg så bare den nye tabel på denne måde: Select * From products Join udlaan on products.productname_id = productsname.productname_id Join udlaan on products.product_id = udlaan.product_id Where udlaan.user_id = 1
25. september 2012 - 18:07
#28
Nu skal begge joins måske ikke være udlaan ved join.
25. september 2012 - 21:41
#29
nej det skal naturligvis vaere de rigtige tabelnavne Select * From products Join productsname on products.productname_id = productsname.productname_id Join udlaan on products.product_id = udlaan.product_id Where udlaan.user_id = 1
25. september 2012 - 22:08
#30
Tak for hjælpen Arne. Smid gerne et svar,
25. september 2012 - 22:16
#31
svar
26. september 2012 - 15:11
#32
Det virker ikke når jeg tilføjer følgende i forhold til #29: Join productsname on products.productname_id = productsname.productname_id Jeg får blot udskrevet id tallene skrevet i product tabellen. den tager det ikke fra productname tabellen.
26. september 2012 - 15:26
#33
kan du poste hele SQL'en?
26. september 2012 - 15:47
#34
Yes. Her får du den opdaterede version. Nu bruger lige første kolonne. SELECT `manufacturer_id`, `productname` FROM `products` Join `manufacturers` on `manufacturers`.`id` = `products`.`manufacturer_id` Join `lendings` on `products`.`id` = `lendings`.`product_id` Where `lendings`.`user_id` = ? -manufacturers- id name -products- id manufacturer_id productname -users- id firstname -lendings- user_id product_id
26. september 2012 - 16:02
#35
put flere felter i SELECT output og angiv med tabel navn. SELECT tabel1.felt1,tabel2.felt2,tabel3.felt3,tabel3.felt4 FROM ...
26. september 2012 - 16:33
#36
skriver man så dette ved from. ... FROM tabel1, tabel2, tabel3
26. september 2012 - 16:56
#37
Skulle det ikke kun være Inner join med JOIN (den nye måde) Er #35 ikke den gamle måde i forhold til din artikel?
27. september 2012 - 04:25
#38
Jeg vil foreslaa den nye maade, men den gamle maade virker stadig.
27. september 2012 - 04:26
#39
Altsaa hvorvidt man bruger JOIN eller komma mellem tabeller. Man bruger altid komma mellem felter.
27. september 2012 - 08:58
#40
Skal man skrive tabellen to gange i From hvis man henter fra mere end en kolonne i tabellen? SELECT tabel1.felt1, tabel1.felt2, tabel2.felt1 FROM tabel1, tabel1, tabel2
27. september 2012 - 15:04
#41
nej du skal kun angive en tabel 2 gange i FROM hvis du vil have fat i 2 forskellige raekker fra den (self join)
27. september 2012 - 15:16
#42
Okay. Hvorfor får jeg så følgende fejl: Not unique table/alias: 'manufacturers' SELECT `products`.`manufacturer_id`, `products`.`productname`, `manufacturers`.`id`, `manufacturers`.`name` FROM `products`, `manufacturers` Join `manufacturers` on `manufacturers`.`id` = `products`.`manufacturer_id` JOIN `lendings` ON `products`.`id` = `lendings`.`product_id` WHERE `lendings`.`user_id` = ?
27. september 2012 - 15:26
#43
fordi du netop har manufacurers to gange i from
27. september 2012 - 15:34
#44
Mener du der i join?
27. september 2012 - 16:23
#45
FROM `products`, `manufacturers` <---------- foerste gang Join `manufacturers` on `manufacturers`.`id` = `products`.`manufacturer_id` <-------- anden gang
27. september 2012 - 16:35
#46
Når der. Hvilken en af dem skal jeg fjerne? jeg skal jo sammenligne værdierne for manufacturerne i begge tabeller.
27. september 2012 - 16:46
#47
den foerste - jeg synes du skal bruge moderne JOIN
27. september 2012 - 21:00
#48
Alt det der skal sammenlignes med hindanden skal det selectes?
28. september 2012 - 01:32
#49
nej du skal kun selecte det som du skal bruge
28. september 2012 - 06:35
#50
Når. Tak igen.
09. november 2012 - 13:52
#51
Hvad gør jeg hvis jeg får samme værdi i et af felterne i begge rækker?
20. november 2012 - 01:22
#52
Er det et problem?
Computerworld tilbyder specialiserede kurser i database-management