Avatar billede wolfgang Praktikant
03. november 2004 - 15:04 Der er 15 kommentarer og
1 løsning

SQL sætning - flere tabeller

Hej,

Jeg har brug for at sammensætte et udtræk fra tabellen tbl_Projects.
Udfordringen ligger i at den skal sammensættes på grundlag af data i 2 andre tabeller.

Dette skal bruges til at populerer en Form DropDown, med brugerens "aktive" projekter.
De skal findes på baggrund af brugerens registrering i tbl_UserClassLinks og tbl_ProjectLinks

Database/struktur beskrivelse:

tbl_Projects
(tbl_ProjectID, ProjectTitle, ProjectDescription)
Indeholder alle projekter.

tbl_UserClassLinks
(UserLink, ClassLink)
Binder Brugeren sammen med tilknyttede klasser.

tbl_ProjectLinks
ClassLink, ProjectLink)
Binder Klasserne sammen med tilknyttede projekter.

Brugerlinket(ID) findes i Sessionen ("UserID")

Håber der er nogen der kan hjælpe.


MVH
Wolfgang
Avatar billede fennec Nybegynder
03. november 2004 - 15:24 #1
<select name="project">
<%
set rs = conn.execute("select tbl_Projects.* from tbl_Projects INNER JOIN tbl_ProjectLinks ON tbl_ProjectLinks.ProjectLink = tbl_Projects.tbl_ProjectID INNER JOIN tbl_UserClassLinks ON tbl_UserClassLinks.ClassLink = tbl_ProjectLinks.ClassLink where tbl_UserClassLinks.UserLink = "& Session("UserID"))
do while not rs.eof
  response.write "<option value='"& rs("tbl_ProjectID") &"'>"& rs("ProjectTitle")
  rs.MoveNext
loop
%>
</select>
Avatar billede wolfgang Praktikant
08. november 2004 - 10:11 #2
Hej Fennec,

Tak for dit svar. Jeg får dog følgende fejl ved afvikling.

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "tbl_ProjectLinks.ProjectLink = tbl_Projects.tbl_ProjectID INNER JOIN tbl_UserClassLinks ON tbl_UserClassLinks.ClassLink = tbl_ProjectLinks.ClassLink".

Kan du hjælpe mig lidt videre?

MVH
Wolfgang
Avatar billede fennec Nybegynder
08. november 2004 - 10:30 #3
Har du taget koden, som jeg havde lavet den???
Prøv evt at smide din kode ind, så jeg kan se den.
Avatar billede wolfgang Praktikant
08. november 2004 - 11:12 #4
Hej igen,

Her er min SQL-sætning.

select tbl_Projects.* from tbl_Projects INNER JOIN tbl_ProjectLinks ON tbl_ProjectLinks.ProjectLink = tbl_Projects.tbl_ProjectID INNER JOIN tbl_UserClassLinks ON tbl_UserClassLinks.ClassLink = tbl_ProjectLinks.ClassLink where tbl_UserClassLinks.UserLink = "& Session("UserID")&"
Avatar billede fennec Nybegynder
08. november 2004 - 12:21 #5
Jeg kan ikke se nogen fejl i koden, bortset fra din slutning hvor &" ikke skal være der i slutningen:
... = "& Session("UserID")&"

... men det kan også være fordi du ikke har smid hele koden ind. Hvis det ikke er det, så smid lige hele din kode ind. Fra <select...> til </select>.
Avatar billede wolfgang Praktikant
08. november 2004 - 12:27 #6
<%           
SQL2 = "select tbl_Projects.* from tbl_Projects INNER JOIN tbl_ProjectLinks ON tbl_ProjectLinks.ProjectLink = tbl_Projects.tbl_ProjectID INNER JOIN tbl_UserClassLinks ON tbl_UserClassLinks.ClassLink = tbl_ProjectLinks.ClassLink where tbl_UserClassLinks.UserLink = "& Session("UserID")&""

Set RS2 = Conn.Execute(SQL2)
%>

<select name="Projects" class="T_FormMenu" id="Projects">

<% Do While Not RS2.EOF %>

           
<option value="<%=RS2("tbl_ProjectID")%>"><%=RS2("ProjectTitle")%></option>

<%
RS2.MoveNext
Loop
%>
</select>
Avatar billede fennec Nybegynder
08. november 2004 - 12:34 #7
.. og Session("UserID") er ikke tom???
Avatar billede wolfgang Praktikant
08. november 2004 - 12:38 #8
Hej Fennec,

Nej - den har værdien 1.
Avatar billede fennec Nybegynder
08. november 2004 - 12:53 #9
Jeg har lige prøvet at lave de 3 tabeller her hos mig og fyld lidt test data i. Det fungere fint med den SQL-sætning. Hvilken database kører du på??
Avatar billede wolfgang Praktikant
08. november 2004 - 12:54 #10
Access :(
Avatar billede wolfgang Praktikant
08. november 2004 - 14:53 #11
Hej Fennec.

Vil du evt. prøve at sende den test, du havde lavet.
Så kan jeg da prøve at sammenligne.

MVH
Wolfgang
Avatar billede fennec Nybegynder
08. november 2004 - 15:30 #12
Hvis du bruger Access skal du have () omkring dine joins. Denne virke i hvert fald i Access, for den er klippet ud derfra :O)

SELECT    *
FROM        ((tbl_Projects INNER JOIN
                      tbl_ProjectLinks ON tbl_ProjectLinks.ProjectLink = tbl_Projects.tbl_ProjectID) INNER JOIN
                      tbl_UserClassLinks ON tbl_UserClassLinks.ClassLink = tbl_ProjectLinks.ClassLink)
WHERE    (tbl_UserClassLinks.UserLink = 1)
Avatar billede wolfgang Praktikant
08. november 2004 - 16:14 #13
Så spiller det sgu :D

Takker. Husk at oprette et svar, så du kan få dine velfortjente points.

PS: Hvordan kan jeg gruppere på "tbl_ProjectID" i den ovenstående SQLsætning?
Syntes ikke rigtig, at jeg kan få det placeres korrekt.

MVH
Wolfgang
Avatar billede fennec Nybegynder
08. november 2004 - 16:30 #14
"GROUP BY" kommer lige efter "WHERE" og før "ORDER BY" hvis du også vil have sådan en.

SELECT    *
FROM        ((tbl_Projects INNER JOIN
                      tbl_ProjectLinks ON tbl_ProjectLinks.ProjectLink = tbl_Projects.tbl_ProjectID) INNER JOIN
                      tbl_UserClassLinks ON tbl_UserClassLinks.ClassLink = tbl_ProjectLinks.ClassLink)
WHERE    (tbl_UserClassLinks.UserLink = 1)
GROUP BY tbl_ProjectID
ORDER BY ProjectTitle
Avatar billede wolfgang Praktikant
08. november 2004 - 18:58 #15
Hej igen,

Når jeg bruger den syntaks, får jeg denne fejl.

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der kan ikke grupperes efter felter, der er markeret med "*".
Avatar billede wolfgang Praktikant
08. november 2004 - 20:55 #16
det er nu løst.
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