Gå til innhold

[Løst]hente info fra tre tabeller LØST


Anbefalte innlegg

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 av stclem
Lenke til kommentar
Videoannonse
Annonse

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 av Ernie
Lenke til kommentar

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 av stclem
Lenke til kommentar
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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...