Gå til innhold

Hjelp til where i inner join spørring


Anbefalte innlegg

Heisann, jeg har lest en del om MySQL på internett, men det meste jeg har lest er på Engelsk. Jeg sliter litt med å forstå inner og outer og left og right join. Kan noen være så snille å linke meg til en god norsk guide eller skrive noen korte linjer her?

 

- På forhånd takk

Endret av TheClown
Lenke til kommentar
Videoannonse
Annonse

Inner join mellom to tabeller henter kun ut resultatene som kan linkes mellom begge tabellene, mens outer join henter i tillegg ut resultater som ikke finnes.

 

Outer join finnes i tre varianter, left, right, og full.

 

Har man da en spørring som går mot to tabeller med left, vil man få ut gyldige verdier for alle rader i den første tabellen, mens rader som ikke kan kobles i den andre tabellen vil inneholde nullverdier.

 

Right er omvendt og full er begge deler.

Lenke til kommentar

Altså i databasen min går det igjen 3 verdier, user_id, link_id og cat_id. Når jeg lager objekter bruker jeg bare en verdi for å finne ut hvilke brukernavn som har postet. Da lagrer jeg bare user_id'en, den er lik i alle tabelene, og i tablet user ligger user_id og username ved siden av hverandre.

 

jeg pleier å bruke

 

t1.user_id, t2.user_id, t2.username FROM [blablabla] t1, user t2 WHERE t1.user_id = t2.user_id

 

Hvordan får jeg til det samme med inner/outer slik at jeg også kan hente mer info som er linket sammen med brukernavn/bruker id i tablet user?

Lenke til kommentar

Jeg har testet i hele dag på forskjellige muligheter. Det funker fint med følgende spørring, men jeg skulle gjerne hatt med WHERE t1.com_id = $pageid, hvor setter jeg den? Får fine feil uansett hvor jeg setter den

 

$getcomment = "SELECT t1.com_id, t1.link_id, t1.user_id, t1.com_posted, t1.com_text, t1.visible, t2.user_id, t2.username FROM comments AS t1 INNER JOIN user AS t2 ON t2.user_id = t1.user_id";

Lenke til kommentar

$getlink = "SELECT t1.link_id, t1.link_title, t1.link_url, t1.link_desc, t1.link_posted, t1.user_id, t2.user_id, t2.username, t1.cat_id, t3.cat_id, t3.cat_name FROM link t1, user t2, cat t3 WHERE t1.link_id = $_GET[id] AND t1.user_id = t2.user_id AND t1.cat_id = t3.cat_id WHERE t1.link_id = $pageid ORDER BY t1.com_id DESC";

 

gir følgende feilmelding:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE t1.link_id = ORDER BY t1.com_id DESC' at line 1

 

:)

Endret av TheClown
Lenke til kommentar

Jaha.

 

Og... du ser at $pageid er en tom variabel?

 

Jøss.

 

Er nok noe php-syntaks du må fikse der først.

 

Kjenner ikke til php selv, men det er sikkert noe så barnslig som at du kjapt kan løse det med:

t3.cat_id WHERE t1.link_id = " + $pageid + " ORDER BY t1.com_id DESC";

 

Vær forøvrig forsiktig med å bruke denslags, da det utgjør en gigantisk SQL-injection risiko.

 

Eller hva nå streng-sammenslåingsoperatoren er i php.

Endret av Bruker30050
Lenke til kommentar

Iiiik, jeg kopierte og redigerte i feil spørring :p

 

Haha

$getcomment = "SELECT t1.com_id, t1.link_id, t1.user_id, t1.com_posted, t1.com_text, t1.visible, t2.user_id, t2.username FROM comments AS t1 INNER JOIN user AS t2 ON t2.user_id = t1.user_id WHERE t1.link_id = $pageid ORDER BY t1.com_id DESC";

 

Var det jeg mente. Den gir feilmelding:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY t1.com_id DESC' at line 1

Lenke til kommentar

pageid variablen din er tom, så når databasen får sql selecten så ser den slik ut

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE t1.link_id = (her skulle pageid vært, men den variabelen er tom) ORDER BY t1.com_id DESC' at line 1
Lenke til kommentar

Forsatt feil med:

 

$getcomment = "SELECT t1.com_id, t1.link_id, t1.user_id, t1.com_posted, t1.com_text, t1.visible, t2.user_id, t2.username FROM comments AS t1 INNER JOIN user AS t2 ON t2.user_id = t1.user_id WHERE t1.link_id = $_GET[link] ORDER BY t1.com_id DESC";

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY t1.com_id DESC' at line 1

Lenke til kommentar

Når du har fått så klar hentydning om problemstilling, hvorfor ikke ta seg bryet med å SKRIVE ut sql spørringen du genererer, og se om den faktisk blir riktig. For meg ser dette ut som et PHP-problem, og ikke et databaseproblem. Problemenere mot databasen synes bare å være symptomet.

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å
×
×
  • Opprett ny...