stclem Skrevet 14. april 2009 Del Skrevet 14. april 2009 (endret) Holder på med et lite prosjekt som jeg ikke helt vet hvordan jeg skal ha enda. Støtte på et enkelt lite problem allerede i startfasen som jeg ønsker litt veiledning på. Har tre tabeller i en database. tabell1 tabell2 tabell3 tabell1 har 3 felt: id - valgt1 - valgt2 tabell2 har 2 felt: id - valg1 tabell3 har 2 felt: id - valg2 Later som vi har fylt inn følgende i databasen. tabell1: (id - valgt1 - valgt2) 1 - 1 - 3, 2 - 2 - 1 tabell2: (id - valg1) 1 - sjokolade, 2 - melk, 3 - kaffe tabell3: (id - valg2) 1 - eple, 2 - banan, 3 - kiwi Har begynt på en enkel php fil for å hente dette ut fra databasen og til en nettside. Har koblet den til databasen og får ut data, men har ikke helt forstått hvordan jeg får hentet fra alle tabellene på en gang. $result = mysql_query("SELECT * FROM tabell1 ORDER BY id DESC"); while ($myrow = mysql_fetch_array($result)) { printf("%s %s %s<br>\n", $myrow["id"], $myrow["valgt1"], $myrow["valgt2"); } Får da opp følgende på nettsiden: 1 1 3 2 2 1 Men ønsker å få opp følgende: 1 sjokolade kiwi 2 melk eple Regner med at dere skjønner prinsippet og kan hjelpe meg på vei. Endret 14. april 2009 av stclem Lenke til kommentar
Ernie Skrevet 14. april 2009 Del Skrevet 14. april 2009 (endret) For å koble sammen to eller flere tabeller benytter man en eller annen JOIN-variant. MySQL-dokumentasjonen for det her er ganske innviklet etter min mening, så her følger noen enkle eksempler: SELECT * FROM tabell1 JOIN tabell2 ON tabell1.felt1 = tabell2.felt2 Dette kan utvides til flere tabeller: SELECT * FROM tabell1 JOIN tabell2 ON tabell1.felt1 = tabell2.felt2 JOIN tabell3 ON tabell2.felt2 = tabell3.felt3 Det er heller ingenting i veien for å koble sammen tabeller med flere kriterier: SELECT * FROM tabell1 JOIN tabell2 ON (tabell1.felt1 = tabell2.felt2 AND tabell1.feltA = tabell2.feltB) Dette kan så begrenses, sorteres osv. som enhver annen SELECT v.hj.a WHERE, ORDER BY osv. Endret 14. april 2009 av Ernie Lenke til kommentar
OIS Skrevet 14. april 2009 Del Skrevet 14. april 2009 Dette hører hjemme under Databaser. "SELECT t1.id, t2.valg1, t3.valg2 FROM tabell1 as t1, tabell2 as t2, tabell3 as t3 WHERE t1.valgt1 = t2.id and t1.valgt2 = t3.id ORDER BY t1.id DESC" Lenke til kommentar
stclem Skrevet 14. april 2009 Forfatter Del Skrevet 14. april 2009 (endret) Prøvde OIS forslag, virket enklest. Men glemte en ting. Hva om man skal kunne velge to ting i en tabell. Altså slik: tabell1 har 3 felt: id - valgt1 - valgt2 - valgt3 tabell2 har 2 felt: id - valg1 tabell3 har 2 felt: id - valg2 Later som vi har fylt inn følgende i databasen. tabell1: (id - valgt1 - valgt2) 1 - 1 - 3, 2 - 2 - 1 tabell2: (id - valg1) 1 - sjokolade, 2 - melk, 3 - kaffe tabell3: (id - valg2) 1 - eple, 2 - banan, 3 - kiwi Fylt inn følgende i tabell 1 1 1 3 2 2 2 1 3 Men ønsker å få opp følgende: 1 sjokolade kiwi melk 2 melk eple kiwi Valgt3 henter fra tabell2 på samme måte som valgt1. Endret 14. april 2009 av stclem Lenke til kommentar
OIS Skrevet 14. april 2009 Del Skrevet 14. april 2009 Men ønsker å få opp følgende:1 sjokolade kiwi melk 2 melk eple kiwi Valgt3 henter fra tabell2 på samme måte som valgt1. Du legger til tabell3 en gang til. tabell3 as t3, (husk komma på nest siste tabell) tabell3 as t4 Du må legge til "t4.valg2 as valg3" som valgt retur etter select og en ny sammenligning for t4.id mot t1.valgt3. Lenke til kommentar
stclem Skrevet 14. april 2009 Forfatter Del Skrevet 14. april 2009 helt konge, takk så mye. Lenke til kommentar
blackbrrd Skrevet 15. april 2009 Del Skrevet 15. april 2009 Det er ikke anbefalt å kjøre "joins" i WHERE clausen. Det gjør det vesentlig vanskligere å lese spørringen, spesiellt hvis du har spørringer med mange "joins" (du må hele tiden flytte blikket opp og ned i spørringen mellom WHERE og FROM clausen for å se om det er et join eller en begrensning det er snakk om). Typiske feil man får er f.eks at man har glemt å legge til en AND clause og får et cross join. Anbefalt måte å gjøre det på: SELECT t1.id, t2.valg1, t3.valg2 FROM tabell1 as t1 INNER JOIN tabell2 as t2 ON t1.valgt1 = t2.id, INNER JOIN tabell3 as t3 ON t1.valgt2 = t3.id ORDER BY t1.id DESC" Lenke til kommentar
stclem Skrevet 15. april 2009 Forfatter Del Skrevet 15. april 2009 Takk for flere forslag, men får ikke den siste der til å virke. Denne funker. $result = mysql_query("SELECT t1.*, t2.valg1, t3.valg2, t4.valg1 as valg3 FROM tabell1 as t1, tabell2 as t2, tabell3 as t3, tabell2 as t4 WHERE and t1.valgt1 = t2.id and t1.valgt2 = t3.id and t1.valgt3 = t4.id ORDER BY t1.id DESC" ); while ($myrow = mysql_fetch_array($result)) { printf("%s %s %s %s %s<br>\n", $myrow["id"], $myrow["dato"], $myrow["valg1"], $myrow["valg2"], $myrow["valg3"]); } Denne funker ikke. $result = mysql_query("SELECT t1.*, t2.valg1, t3.valg2, t4.valg1 as valg3 FROM tabell1 as t1 INNER JOIN tabell2 as t2 ON t1.valgt1 = t2.id, INNER JOIN tabell3 as t3 ON t1.valgt2 = t3.id INNER JOIN tabell2 as t4 ON t1.valgt3 = t4.id ORDER BY t1.id DESC" ); while ($myrow = mysql_fetch_array($result)) { printf("%s %s %s %s %s<br>\n", $myrow["id"], $myrow["dato"], $myrow["valg1"], $myrow["valg2"], $myrow["valg3"]); } Lenke til kommentar
blackbrrd Skrevet 15. april 2009 Del Skrevet 15. april 2009 Dropp komma på denne linjen: INNER JOIN tabell2 as t2 ON t1.valgt1 = t2.id, Lenke til kommentar
stclem Skrevet 15. april 2009 Forfatter Del Skrevet 15. april 2009 ja var ikke værre, er slike småting som skal ødelegge takk. 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å