Avatar billede arj79 Nybegynder
11. oktober 2006 - 15:21 Der er 2 kommentarer og
1 løsning

hent fra flere db'er i en SQL sætning

hej er der nogen der han hjælpe mig med at hente data fra 3 mysql db’er samtidig.

De 3 db’er

Lande
  `id` int(11) NOT NULL auto_increment,
  `CountryCode` varchar(3) NOT NULL,
  `CountryName` varchar(255) NOT NULL,

Links_overskrift
  `overskrift_id` int(11) NOT NULL auto_increment,
  `overskrift` text NOT NULL,

Links
  `id` int(11) NOT NULL auto_increment,
  `link` text NOT NULL,
  `hits` int(11) NOT NULL,
  `comment` text NOT NULL,
  `contry` varchar(255) NOT NULL, (Her sætter jeg ContryCode feltet fra db’en Lande ins så jeg kan finde ud af hvilke land linket høre til under)
  `headline_id` int(11) NOT NULL,(Her sætter jeg id feltet fra links_overskrift db’en såjeg ved hvilken overskrift linket høre til under. )

Mit problem består i at jeg skal have konstroeret en SQL sætning der henter:
-    Alle alle felter i Link DB’en
-    Det CountryName fra Lande db’en der passer sammen med contry feltet fra Link db’en
-    Henter den overskrift fra Links_overskrift db’en der passer sammen med hedline_id fra Links db’en

I en SQL sætning
Avatar billede swiatecki Novice
11. oktober 2006 - 16:10 #1
SELECT links.id, links.link, links.hits, links.comment, links.country, links.headline_id, lande.CountryName, links_overskrift.overskrift from links, lande, links_overskrift where links.country = lande.CountryName  AND links_overskrift.overskrift = links.headline_id

mener jeg nok .. ?
Avatar billede hardcorewizard Nybegynder
16. oktober 2006 - 21:24 #2
Tror du misformulerer dit spørgsmål. Der er ikke tale om at selecte data fra flere db'er på en gang, men fra flere tables. Ved hvad du mener, men det er vigtigt lige at få terminologien på plads ;).

Du skal nok kigge nærmere på joins, da dette er en essentiel del af en relationel databasestruktur. For at du kan få et output som du adspørger kan du formulere din SQL på følgende måde:

SELECT links.*, lande.CountryName, Links_overskrift.overskrift FROM links
  INNER JOIN lande ON lande.id = links.country    /* Jeg benytter her lande.id, da det umiddelbart giver mest mening (du kan da ændre din countrycode uden at skulle ændre dine relationer) */
  INNER JOIN links_overskrift ON links_overskrift.overskrift_id = links.headline_id

Jeg vil godt anbefale dig at du omstrukturerer din database. Du bør altid bruge ens navne for tabellernes id-felt (undtagen hvis du naturligvis bruger præfix), og holde navne på referencer i en standard som f.eks. [tabel]_id. Således virker det forvirrende når du har en tabel der hedder "Links_overskrift", hvor id-feltet hedder "overskrift_id", og referencen fra "Links" hedder "headline_id". Blot et tip ;). Brug heller aldrig information der evt. skal ændres i fremtiden til referencer. F.eks. bruger du CountryCode som reference, men hvis du nu havde skrevet SW for Sverige, frem for SE (som er korrekt), og du havde tilføjet 2000 links, så skulle du opdatere samtlige af de links for at rette din trykfejl. Det er her mere hensigtsmæssigt at du benytter dig af et id-nummer der aldrig vil ændre sig. Det er jo også hele fordelen ved en database med relationer ;).
Avatar billede arj79 Nybegynder
01. februar 2007 - 17:21 #3
luk
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