nree Skrevet 3. august 2010 Del Skrevet 3. august 2010 SELECT t1.id, t1.timestamp, t1.uid, t1.what, t1.ip, t1.ekstra, t2.id AS uid, t2.fornavn, t2.mellomnavn, t2.etternavn FROM logg AS t1, brukere AS t2 WHERE t1.uid = t2.id ORDER BY t1.id DESC LIMIT 300; Har denne spørringen i starten på et PHP script som henter ut en logg. Problemet oppstår hvis t1.uid ikke eksisterer som t2.id, jeg ville helst da bare fått ut blankt resultat. Har aldri forstått logikken i join, kan noen forklare/vise hvordan dette kan/skal gjøres? Jeg lurer også på hvordan join er mulig i spørringer som involverer tre eller flere tabeller, fint om noen kunne vist meg noen eksempler. Lenke til kommentar
Gjest Skrevet 3. august 2010 Del Skrevet 3. august 2010 (endret) Prøv denne: SELECT t1.id, t1.timestamp, t1.uid, t1.what, t1.ip, t1.ekstra, t2.id AS uid, t2.fornavn, t2.mellomnavn, t2.etternavn FROM logg AS t1, brukere AS t2 INNER JOIN t1 ON t1.uid = t2.id ORDER BY t1.id DESC LIMIT 300; Ser nå idag at det er feil i spørringen, min feil inatt. Jeg var trøtt :/ Endret 4. august 2010 av Gjest Lenke til kommentar
nree Skrevet 3. august 2010 Forfatter Del Skrevet 3. august 2010 Fikk feilmelding: Not unique table/alias: 't1' Kunne du forklart hva som gjør hva? Lenke til kommentar
Crowly Skrevet 4. august 2010 Del Skrevet 4. august 2010 SELECT t1.id, t1.timestamp, t1.uid, t1.what, t1.ip, t1.ekstra, t2.id AS uid, t2.fornavn, t2.mellomnavn, t2.etternavn FROM logg AS t1 INNER JOIN brukere AS t2 ON t1.uid = t2.id ORDER BY t1.id DESC LIMIT 300; Lenke til kommentar
nree Skrevet 4. august 2010 Forfatter Del Skrevet 4. august 2010 Byttet INNER JOIN med LEFT JOIN, da fungerte det. Kan noen forklare meg hvordan/hvorfor etc. ? Ønsker å lære dette. Lenke til kommentar
Crowly Skrevet 4. august 2010 Del Skrevet 4. august 2010 (endret) Jeg lurer også på hvordan join er mulig i spørringer som involverer tre eller flere tabeller, fint om noen kunne vist meg noen eksempler. SELECT a.felt1, a.felt2, b.felt3, b.felt4, c.felt5, <snip> z.felt100 FROM tabell1 a INNER JOIN tabell2 b ON a.id=b.id INNER JOIN tabell3 c ON a.id=c.id INNER JOIN tabell4 d ON c.zxy=d.abc <snip> INNER JOIN tabellx z ON a.id=z.id WHERE ... ORDER BY ... Edit2: Må ikke være samme join, i dette tilfellet INNER JOIN, hele veien, kan selvfølgelig bruke det som er hensiktsmessig Hvordan man kobler tabellene i ON delen kan også variere en del, jeg brukte kun noe helt enkelt. http://www.w3schools.com/SQl/sql_join_inner.asp http://www.w3schools.com/sql/sql_join.asp http://en.wikipedia.org/wiki/Join_(SQL) (google søk på sql joins) LEFT JOIN: Return all rows from the left table, even if there are no matches in the right table RIGHT JOIN: Return all rows from the right table, even if there are no matches in the left table The INNER JOIN keyword return rows when there is at least one match in both tables. An outer join does not require each record in the two joined tables to have a matching record. The joined table retains each record—even if no other matching record exists. Er ikke helt stødig i alle join varianter. Kan anbefale Learning SQL fra O'Reilly (du kan lese deler av boken på denne linken). Den bruker mysql i eksemplene, men viser også hvordan det gjøres i (i alle fall) MS Sql og Oracle i tillegg der hvor det er avvik mellom databasene. Edit: Hadde ikke lest første posten helt, rettet mest på ColdIce , for slik du har skrevet select'en din så er det tilsvarende en INNER JOIN. Du er nødt til å bruker LEFT JOIN når du vil Problemet oppstår hvis t1.uid ikke eksisterer som t2.id, jeg ville helst da bare fått ut blankt resultat. som du selv oppdaget. Alternativt RIGHT JOIN hvis tabellene hadde vært i motsatt rekkefølge. Endret 4. august 2010 av Crowly 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å