Just nu i M3-nätverket
Jump to content

Inner join


Rolf

Recommended Posts

Vet någon var man kan hitta en ordentlig beskrivning för hur inner join fungerar? Det måste väl finnas nån bra guide någonstans.

 

Jag har en lista med kurser och till varje kurs vill jag kolla om det finns en fil kopplad till kursen. Just nu gör jag på detta sätt:

 

<% Artikel = rsArticle("ArticleID")%>

<% ' Om det finns filer kopplade till artiklen så visas de här.

Connect2 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/article_file.mdb")

Set rsFile = Server.CreateObject("adodb.recordset")

rsFile.Open "article_file WHERE ArticleID = " + Replace(Artikel, "'", "''") + "", Connect2, 2, 3

Count = 0

Response.Write "<BR>"

While Not rsFile.EOF

Response.Write "<a href=""filelist_download.asp?id=" & rsFile("id") & """>"

if rsFile("CategoryID") = 1 then

Response.Write "<img src=""images/pdf.gif"" + border=0 hspace=2>"

elseif rsFile("CategoryID") = "2" then

Response.Write "<img src=""images/word.gif"" + border=0 hspace=2>"

elseif rsFile("CategoryID") = "3" then

Response.Write "<img src=""images/excel.gif"" + border=0 hspace=2>"

elseif rsFile("CategoryID") = "4" then

Response.Write "<img src=""images/powerpoint.gif"" + border=0 hspace=2>"

elseif rsFile("CategoryID") = "5" then

Response.Write "<img src=""images/document.gif"" + border=0 hspace=2>"

end if

Response.Write Trim(rsFile("filename"))

Response.Write "</A><BR>"

rsFile.MoveNext

Count = Count + 1

Wend

if Count <> "0" then

Response.Write "<BR>"

else

end if

%>

 

Men då öppnar man ju databasen för varje post. Det verkar korkat. Det är väl inner join man ska använda?

Link to comment
Share on other sites

Jag fick det inte att funka med den satsen men det gick när jag körde den här Selectsatsen:

Set rsKurser = Server.CreateObject("ADODB.Recordset")

Visa = "SELECT * FROM filer, kurser WHERE filer.KursID = kurser.KursID"

rsKurser.Open Visa, Connect, adOpenStatic, adLockOptimistic

 

Är det för att det är access-databas?

 

Grejen är att det kan finnas flera filer till varje kurs. Nu när det finns mer än 1 fil så visas kursen flera gånger. Vad gör man åt det?

 

Link to comment
Share on other sites

Kan hända att du måste skriva INNER JOIN i Access.

 

Flera rader ; det är så här man gör. När du visar resultat på din hemsida hämtar du bara första posten när du visar kursen och alla poster när du ska visa filerna.

 

Ska du visa flera kurser på en gång kan det vara lättare att göra nästlade recordset.

 

 

*** Jag flyttade tråden till Databaser & SQL ***

 

 

 

[inlägget ändrat 2002-09-09 21:28:25 av Mr Andersson]

Link to comment
Share on other sites

Nu förstod jag faktiskt inte. Här är hela koden:

 

<%Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/kurser.mdb")&";"

Set rsKurser = Server.CreateObject("ADODB.Recordset")

Visa = "SELECT * FROM filer, kurser WHERE filer.KursID = kurser.KursID"

rsKurser.Open Visa, Connect, adOpenStatic, adLockOptimistic %>

 

Vilket öppnar recset. Hur ska det se ut om man byter det mot inner join?

 

Sen så ser loopen ut så här.

 

<% X=0

DO UNTIL X=100 OR rsKurser.EOF %>

<%=(rsKurser.Fields.Item("Titel").Value)%><br>

<%=(rsKurser.Fields.Item("Beskrivning").Value)%>

 

<a href="filelist_download.asp?id="<%=(rsKurser.Fields.Item("Filename").Value)%>">

<%if rsKurser("CategoryID") = 1 then

Response.rsKurser "<img src=""images/pdf.gif"" + border=0 hspace=2>"

elseif rsKurser("CategoryID") = "2" then

Response.Write "<img src=""images/word.gif"" + border=0 hspace=2>"

elseif rsKurser("CategoryID") = "3" then

Response.Write "<img src=""images/excel.gif"" + border=0 hspace=2>"

elseif rsKurser("CategoryID") = "4" then

Response.Write "<img src=""images/powerpoint.gif"" + border=0 hspace=2>"

elseif rsKurser("CategoryID") = "5" then

Response.Write "<img src=""images/document.gif"" + border=0 hspace=2>"

end if%>

<%Response.Write Trim(rsKurser("filename"))%></a>

 

<% rsKurser.MOVENEXT

LOOP

rsKurser.CLOSE

Set rsKurser = nothing

%>

 

Det funkar alltså men om en kurs har två filer så visas kursen två gånger.

 

Hur gör man?

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...