Avatar billede sorenmt84 Juniormester
11. februar 2006 - 23:21 Der er 12 kommentarer og
1 løsning

inner join hvordan?

Har en kalender hvor jeg henter en månedsoversigt ud sådan her:

strSQL = "SELECT * FROM kalender WHERE CDate(fra) = #" & dato2 & "# OR (CDate(fra) <= #" & dato2 & "# AND til is not null and CDate(til) >= #" & dato2 & "#);"

Det skal jeg have kædet sammen med at den kun skal hente de poster der matcher overstående kriterier fra tabellen kalender, men samtidig også matcher en given værdi fra tabellen kalender_deltagere (feltet: ref_gren), hvordan gør jeg det???
Avatar billede tjp Mester
12. februar 2006 - 01:29 #1
Hvad skal feltet 'ref_gren' fra 'kalender_deltagere' matches med? Kan noget a la dette bruges?:

strSQL = "SELECT * FROM kalender, kalender_deltagere WHERE (CDate(fra) = #" & dato2 & "# OR (CDate(fra) <= #" & dato2 & "# AND til is not null and CDate(til) >= #" & dato2 & "#)) AND kalender_deltagere.ref_gren = " & gren & ";"
Avatar billede sorenmt84 Juniormester
12. februar 2006 - 09:03 #2
feltet ref_gren skal matche med feltet id fra kalender
Avatar billede tjp Mester
12. februar 2006 - 20:22 #3
Sådan her, måske?:

strSQL = "SELECT * FROM kalender, kalender_deltagere WHERE (CDate(fra) = #" & dato2 & "# OR (CDate(fra) <= #" & dato2 & "# AND til is not null and CDate(til) >= #" & dato2 & "#)) AND kalender_deltagere.ref_gren = kalender.id;"
Avatar billede sorenmt84 Juniormester
17. februar 2006 - 10:47 #4
hej tjp

tak for dit svar... og undskyld min sene tilbagemelding! Jeg glemte lige en ting.. du har jo lavet det fint med at kalender_deltagere.ref_gren skal være = xx men hvis jeg nu gerne vil have at ref_gren må have 2 forskellige værdier, er det så bare sådan:??

strSQL = "SELECT * FROM kalender, kalender_deltagere WHERE (CDate(fra) = #" & dato2 & "# OR (CDate(fra) <= #" & dato2 & "# AND til is not null and CDate(til) >= #" & dato2 & "#)) AND kalender_deltagere.ref_gren = kalender.id or kalender_deltagere.ref_gren = ref_2;"

Håber du lige vil hjælpe med det også ;-)
Avatar billede tjp Mester
17. februar 2006 - 12:15 #5
Pga. operator-præcedens skal der lige en parantes omkring 'or'-udtrykket, da 'and' binder stærkere, og hvis 'ref_2' ikke kommer fra 'kalender' eller 'kalender_deltagere' skal den vel indsættes som '" & ref_2 & "':

strSQL = "SELECT * FROM kalender, kalender_deltagere WHERE (CDate(fra) = #" & dato2 & "# OR (CDate(fra) <= #" & dato2 & "# AND til is not null and CDate(til) >= #" & dato2 & "#)) AND (kalender_deltagere.ref_gren = kalender.id OR kalender_deltagere.ref_gren = " & ref_2 & ");"
Avatar billede sorenmt84 Juniormester
17. februar 2006 - 15:55 #6
tak skal du have... vil du smide et svar...
Avatar billede tjp Mester
17. februar 2006 - 20:42 #7
Et svar, så gerne og velbekomme!;-)
Avatar billede sorenmt84 Juniormester
18. februar 2006 - 11:17 #8
Hej tjp... håber du lige vil give lidt hjælp igen... det virkede desværre ikke helt som jeg lige troede..

SQL sætningen ser sådan her ud nu:
strSQL = "SELECT * FROM kalender_deltagere, kalender WHERE (CDate(fra) = #" & dato2 & "# OR (CDate(fra) <= #" & dato2 & "# AND til is not null and CDate(til) >= #" & dato2 & "#)) AND (kalender_deltagere.ref_community = kalender.id OR kalender_deltagere.ref_gren = 0);"

Hvis jeg deler det lidt op...
kalender_deltagere.ref_community = kalender.id  - Virker næsten efter hensigten... Den tager de arrangementer med som den skal, men den tager også lidt mere end den skal... Altså hvor ref_community IKKE er = kalender.id!

MEN det står meget værre til med kalender_deltagere.ref_gren = 0 - SÅ længe jeg har sat værdien til 0 virker det fint, men med alt andet henter den arrangementet fra databasen og gentager det noget der ligner 100 gange... har du et godt bud på det??
Avatar billede tjp Mester
19. februar 2006 - 09:15 #9
Hm, hvis du helt fjerner 'kalender_deltagere.ref_gren = 0' giver den så kun de ønskede rækker for 'kalender_deltagere.ref_community = kalender.id'? Og hvilken datatyper har 'kalender_deltagere.ref_gren'?
Avatar billede sorenmt84 Juniormester
19. februar 2006 - 13:48 #10
Lige nu ser SQL sådan ud:

strSQL = "SELECT * FROM kalender_deltagere, kalender WHERE (CDate(fra) = #" & dato2 & "# OR (CDate(fra) <= #" & dato2 & "# AND til is not null and CDate(til) >= #" & dato2 & "#)) AND kalender_deltagere.ref_community = " & rs_community("id") & ";"

Det giver stadig for mange poster! På en anden side, bruger jeg næsten samme sætning, men hvor den ikke skal tjekke posterne op i mod kalender_deltagere - og det er præcis de samme poster jeg får, så det virker lidt ligesom om at den kun går ind og tjekker om posterne i kalender opfylder dato-kriterierne og intet andet!
Avatar billede sorenmt84 Juniormester
21. februar 2006 - 22:49 #11
Hej tjp

Tak for din store hjælp... med lidt hjælp fra activedeveloper, fandt jeg frem til at der mangler lidt forbindelse mellem de 2 tabeller!

strSQL = "SELECT * FROM kalender WHERE ( (fra = #" & dato2 & "# OR fra <= #" & dato2 & "#) AND til is not null and til >= #" & dato2 & "#) AND Exists(select id from kalender_deltagere where kalender_deltagere.ref_kalender=kalender.id AND ( ref_community = " & rs_community("id") & " OR ref_gren= " & rs_community("ref_gren") & ") )"
Avatar billede tjp Mester
22. februar 2006 - 00:53 #12
Er der ikke noget galt med:
...(fra = #" & dato2 & "# OR fra <= #" & dato2 & "#)...
Der kunne vist ligeså godt stå:
...fra <= #" & dato2 & "#...
Avatar billede sorenmt84 Juniormester
22. februar 2006 - 09:11 #13
Ja har du da egnentlig fuldstændig ret i...!
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
Kurser inden for grundlæggende programmering

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