Avatar billede kev. Nybegynder
30. juni 2002 - 15:34 Der er 2 kommentarer og
1 løsning

Loops ved visning af indlæg i et forum

Sidder og roder lidt med et debatforum (uden brug af komponenter). Indlæggende i et forum kunne f.eks. være således:

Indlæg nr. 1
    Svar nr. 1 på Indlæg nr. 1
          Svar 1 på Svar nr. 1
          Svar 2 på Svar nr. 1
    Svar nr. 2 på Indlæg nr. 1
          Svar på Svar nr. 2
Indlæg nr. 2
    Svar nr. 1 på Indlæg nr. 2
          Svar på Svar nr. 1
              Svar på Svar (på Svar nr. 1)

Tabellen med entries så således ud:
entryID (primær nøgle)
forumID (hvor entries/indlæg hører til)
(Dato, Tid, Overskrift, Indhold mv.)
SvarPaa (felt, der angiver, hvilket indlæg (entryID), dette indlæg er et svar på (er 0, hvis det er et nyt indlæg).

Til at starte med vil jeg så lave en sql-sætning, der udtrække alle entries, hvor SvarPaa er 0 (altså 'hoved'-indlæggene), og sorterer faldende efter dato og tid.

Hver gang der udskrives et indlæg, skal der køres en sql-sætning, hvor der tjekkes, om der er entries, hvor SvarPaa er lig med det nuværende indlægs entryID.

I eksemplet her, vil den så finde 2 svar på indlæg nr. 1. Men når svar 1 er udskrevet, og INDEN svar 2 udskrives, skal den igen gøre det samme, nemlig:

tjekke om der er nogle indlæg, hvor SvarPaa er lig med entryID på svar nr. 1 - og i så fald udskrive disse svar, FØR svar nr. 2 udskrives.

Håber ikke forklaringen var for forvirrende. Jeg kan bare ikke lige regne ud, hvordan mine løkker skal køres. Overvejede om man evt. kunne lave en funktion (lidt a la Function SvarPaaIndlaeg(id)), der tjekker om der er svar på et indlæg. Men den skal jo så kalde sig selv mens den kører, for at finde svar på svar.

Nogle, der har forslag til, hvordan jeg løser dette? Det behøver ikke være en fuld løsning, bare jeg har noget at arbejde videre med.
Avatar billede eagleeye Praktikant
30. juni 2002 - 16:11 #1
For at du kan tage højde for X dybte i dit forum bliver du nok nød til at lave en rekrusiv function som kalder sig selv eller skal du jo lavde X-antal loop inde i hinanden for at være sikker på at alle svar kommer med:


Eks på hvordan du kan lave det med en function:

<HTML>
<HEAD><TITLE>Forum</TITLE></HEAD>
<BODY>
<%
'Åbner connection til databasen
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db7.mdb")

'Kald function med ForumID, startID, Level.. Sæt startID=0 og Level=0
UdskrivForum 1,0,1

'Luk forbinelsen til Databasen
Conn.Close
Set Conn = Nothing
%>
</BODY>
</HTML>

<%
function UdskrivForum(forumID, entryID,level)
  Set rs = Server.CreateObject("ADODB.Recordset")
  strSQL = "SELECT * FROM forumBeskeder WHERE forumID = " & forumID & " AND svarPaa="&entryID&" ORDER BY DATO DESC"
  set rs = Conn.Execute (strSQL)
 
  do while not rs.EOF
    for i = 1 to Level
      Response.Write ":  :"
    next
    Response.Write "entryID=" & Rs("entryID") & " | " & rs("indhold") & "<br>"
    UdskrivForum forumID, rs("entryID"),level+1
    rs.MoveNext
  loop
end function
%>
Avatar billede eagleeye Praktikant
30. juni 2002 - 16:15 #2
Du skal nok lige havde disse to linie med i function mellem loop og end functoin:

  loop
  rs.Close          '<--lukker for recordetsetet
  Set rs = Nothing  '<--Sætte objectet rs = nothing for at nedlægge det..
end function
Avatar billede kev. Nybegynder
30. juni 2002 - 17:12 #3
Perfekt :o)

80 velfortjente point til det....
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