Avatar billede gedekid Nybegynder
13. august 2008 - 12:14 Der er 10 kommentarer og
1 løsning

Sammenkædning af 2 tabeller

Hej eksperter,

jeg vil se om jeg kan forklare mit problem tydeligt.

Jeg har 2 databaser de skal kædes sammen så der bliver vist det rigtige.

stentyper
tunliste

hvor "stentyper" indeholder følgende felter:
     
navn               
tegning_beskr               
tun             
forbrug               
laengde             
bredde               
daek             
laengde_u_nakke               
laegteafstand               
type           
binder           
nakkekrampe             
vent_25             
vent_35               
vent_45               
rygning_tun               
rygning_laengde             
rygning_daek               
start_tun             
slut_tun             
endevalm_tun               
ysten_25_tun             
ysten_35_tun             
ysten_45_tun             
ysten_25_2_tun             
ysten_35_2_tun             
ysten_45_2_tun               
rygbeslag_tun             
soem_tun               
holder_tun               
vent_tun
grat_tun             
min_undertag

den indeholder en masse information om forskellige tagsten der har et navn (navn) alle felter der slutter med _tun indeholder et tun nummer der svarer til et tunnummer i tabellen "tunliste" der har felterne

tun 
vare 
beskrivelse 

hvor *_tun i "stentyper" skal kædes sammen med tun i "tunliste".

------------------------------------------------

Hvordan kan jeg få tabellerne kædet sammen sådan at hvis man eks. har valgt en tagsten der har navn "801" så hiver den tunnumre fra *_tun og finder de tilsvarende på tun i "tunliste" ?


Håber det er til at forstå...

har prøvet en masse forskellige SELECTs bl.a. med stentyper.*, tunliste.* men uden held.
Avatar billede gedekid Nybegynder
13. august 2008 - 12:15 #1
De 2 databaser der skal kædes sammen er naturligvis kun 2 tabeller.
Avatar billede moreless Nybegynder
13. august 2008 - 13:42 #2
WHERE stentyper.rygning_tun = tunliste.tun AND stentyper.start_tun = tunliste.tun AND ...
Avatar billede dmdisco Nybegynder
14. august 2008 - 17:43 #3
de nyeste versioner af mysql har problemer med at vælge flere tabeller på den måde du gør og siger at feltet ikke eksistere hvis dette er tilfældet må du lave dem om til INNER JOINS

eks.
SELECT * FROM stentyper
INNER JOIN tunliste ON stentyper.rygning_tun=tunliste.tun
INNER JOIN tunliste ON stentyper.endevalm_tun=tunliste.tun
...
WHERE ...
Avatar billede gedekid Nybegynder
25. august 2008 - 08:37 #4
Jeg har nu denne:

    $sql = "SELECT * FROM stentyper
        INNER JOIN tunliste tun1 ON stentyper.rygning_tun = tun1.tun
        INNER JOIN tunliste tun2 ON stentyper.endevalm_tun = tun2.tun
        INNER JOIN tunliste tun3 ON stentyper.grat_tun = tun3.tun
        WHERE navn = 801";   

men den får kun fat én row (tun3)
Avatar billede dmdisco Nybegynder
25. august 2008 - 09:39 #5
skal måske være en LEFT JOIN istedet
Avatar billede gedekid Nybegynder
25. august 2008 - 09:40 #6
Den gi'r samme resultat
Avatar billede gedekid Nybegynder
26. august 2008 - 14:20 #7
Hvis jeg bruger denne:

        $sql = "SELECT * FROM stentyper WHERE navn = 801";
        $result = safe_query($sql);
        $row = mysql_fetch_array($result);

        $tunliste = "SELECT * FROM tunliste WHERE tun IN ('". $row["tun"]."', '". $row["binder"]."')";
               
        $tun = safe_query($tunliste);
       
        while($tunrow = mysql_fetch_array($tun)) {
            print $tunrow["beskrivelse"];
        }

så får jeg det ønskede resultat... MEN... jeg skal have et bestemt udregningsresultat udfor hver enkelt produkt... ... Har jeg nogen mulighed for med ovenstående at finde ud af hvad den enkelt $tunrow["beskrivelse"] indeholder og udfor den sætte den rigtige tekst.. andet med end med if/else... ?
Avatar billede dmdisco Nybegynder
26. august 2008 - 14:55 #8
jeg ved ikke hvad du mener, hvad mener du med den rigtige tekst og hvor skulle du have den fra?
Avatar billede gedekid Nybegynder
26. august 2008 - 14:58 #9
jeg har disse:

        //RESULT
        $this->areal_tagflade = round(2*$laengde_a*$laengde_1, 2);
        $this->antaldblvinge = round($laengde_1*2/$this->laegteafstand, 2);
        $this->antal_topsten = round(2*($laengde_1/$this->laegteafstand+$laengde_a/$this->daekbredde), 2);
        $this->antal_tagsten = ceil($this->areal_tagflade*$this->forbrug-$this->antaldblvinge*$this->daekbredde_dv_venstre/$this->daekbredde-$this->antal_topsten);   
        $this->antal_rygningssten = $laengde_a/$this->daeklaengde-2;

hvor $this->antal_topsten så skal så ud for den $tunrow["beskrivelse"] der er en topsten;
Avatar billede gedekid Nybegynder
26. august 2008 - 15:01 #10
Det hele er meget nemt at løse med:

$tagsten = "SELECT * FROM stentyper INNER JOIN tunliste tun ON stentyper.tun = tun.tun WHERE navn = 801";
        $binder = "SELECT * FROM stentyper INNER JOIN tunliste tun1 ON stentyper.binder = tun1.tun WHERE navn = 801";
        $nakkekrampe = "SELECT * FROM stentyper INNER JOIN tunliste tun2 ON stentyper.nakkekrampe = tun2.tun WHERE navn = 801";

men det er nok ikke lige mest optimale løsning
Avatar billede gedekid Nybegynder
27. august 2008 - 12:07 #11
lukker...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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