Avatar billede MrLund Nybegynder
18. oktober 2009 - 15:39 Der er 4 kommentarer og
2 løsninger

Hjælp til SQL sætning

Jeg har denne SQL som fungerer fint som den skal
SELECT * FROM noesis_board INNER JOIN noesis_teammedlemmer ON noesis_board.team = noesis_teammedlemmer.teamid where noesis_teammedlemmer.brugernavn = '" & session("brugernavn") & "' and noesis_teammedlemmer.land = '" & strLand & "' and noesis_board.country = '" & strland & "' and noesis_board.level <= " & session("level") & " ORDER BY noesis_board.created desc LIMIT 20

MEEEEN

Lige nu får jeg naturligvis kun poster, hvor noesis_board.team matcher i tabellen noesis_teammedlemmer

Det jeg skal have den til er,

at jeg skal have tilføjet den også skal vise poster, hvis noesis_board.team = 0

Hvordan kringler jeg den?
18. oktober 2009 - 15:47 #1
Det skulle du faa hvis du erstatter INNER JOIN med RIGHT JOIN
Avatar billede MrLund Nybegynder
18. oktober 2009 - 15:55 #2
jeg synes ikke jeg kan se den store forskel, hvad er det RIGHT JOIN gør i praksis, i stedet for INNER JOIN?
Avatar billede arne_v Ekspert
18. oktober 2009 - 16:19 #3
Hvad med LEFT JOIN ?
18. oktober 2009 - 21:26 #4
Det varede lidt foer jeg fik tid til at komme tilbage til dette spoergsmaal.

Jeg har nu lavet de foelgende to tabeller:

noesis_board
team    country        level    created
1    country1    level1    created1
2    country2    level2    created2


noesis_teammedlemmer
teamid    brugernavn    land
1    bruger1        land1
2    bruger2        land2
3    bruger3        land3

Saa der er en bruger for hvilket der ikke er registreret et team.

Resultatet af query "SELECT * FROM noesis_board INNER JOIN noesis_teammedlemmer ON noesis_board.team = noesis_teammedlemmer.teamid" er


1 country1 level1 created1 1 bruger1 land1
2 country2 level2 created2 2 bruger2 land2

Saa bruger 3 er der ikke.

Hvis jeg bruger RIGHT JOIN faar jeg:

1 country1 level1 created1 1 bruger1 land1
2 country2 level2 created2 2 bruger2 land2
3 bruger3 land3


Mere elegant er det at vende queryen om og bruge LEFT JOIN, saaledes: "SELECT * FROM noesis_teammedlemmer LEFT JOIN noesis_board ON noesis_board.team = noesis_teammedlemmer.teamid"

saa faar jeg dette:


1 bruger1 land1 1 country1 level1 created1
2 bruger2 land2 2 country2 level2 created2
3 bruger3 land3

INNER JOIN giver kun de resultater der er i begge tabeller, RIGHT JOIN giver alle resultater fra den hoejre tabel sammen med de resultater der findes i venstre tabel, og LEFT JOIN giver alle resultater i den venstre tabel sammen med de resultater der findes i hoejre tabel.

Hvis dette ikke svarer paa dit spoergsmaal saa har jeg ikke forstaaet dit spoergsmaal.  I saa fald forklar videre.
Avatar billede MrLund Nybegynder
19. oktober 2009 - 21:56 #5
LEFT JOIN var løsningen.. tak til jer begge :)

arne_v smid du også et svar, så kan i dele i porten :D
Avatar billede arne_v Ekspert
19. oktober 2009 - 23:39 #6
svar
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
Computerworld tilbyder specialiserede kurser i database-management

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