Just nu i M3-nätverket
Gå till innehåll

Inner join


Rolf

Rekommendera Poster

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?

Länk till kommentar
Dela på andra webbplatser

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?

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

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?

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...