09. marts 2004 - 12:56Der er
9 kommentarer og 2 løsninger
HJælp til debatforum
Jeg bakser lidt med et debatforum, men kan ikke helt gennemskue hvordan jeg skal håndtere de enkelte indlæg og særligt svar på tidligere indlæg.
Jeg har tre tabeller: forum: uid, titel, tekst thread: uid, titel, tekst, forum_id indlaeg: uid, navn, email, dato, thread_id, parent_id tekst
Min ide er at have flere fora (fx php og asp) I hvert forum kan der være flere diskussioner (threads) (fx asp->debatforum, asp->funktioner) I hver diskussion kan der så være et antal indlæg, hvortil der kan svares. Strukturen med fora og diskussioner virker fint.
Mht. indlæggene så får alle indlæg det respektive thread_id, og et "overordnet" indlæg får parent_id = 0. Min ide er at et svar til et tidligere indlæg får dette indlægs uid som parent, for på den måde at styre sammenhængen.
Her kommer så mit problem. Når man klikker sig ind i en bestemt diskussion ønsker jeg, at man får en liste med alle overordnede indlæg, og indskudt under disse svar herpå, og eventuelle svar på svarene. Jeg kan bare ikke lige gennemskue, hvordan jeg kan sikre at jeg får alt med, når jeg ikke ved hvor mange niveauer der er under hvert indlæg.
Funktion (id) Denne funktion udskriver sig selv (id) så laves et select, hvor du finder dem, hvor parent_id = id - vi kalder id her for ny_id for hver af disse kalder du funktion(ny_id)
Jeg har selv puslet lidt med tanken om at 'bede' en function om at skrive det, men jeg syntes stadig ikke at jeg helt kan gennemskue, hvordan jeg får mig 'loopet' (eller lignende) igennem alle lag. Der kan principielt være fra 1 til MANGE lag i hver tråd.
Rekursiv er normalt en løkke-funktion der kører inden i sig selv i "Under-løkker".
her et lille eksempel :
Vi antager : en gren er en samling knopper. en knop kan enten være en anden gren eller en frugt.
Vi kalder :
Call frugtplukker(stamme) 'stammen er vel også en slag gren. Logisk set :-)
Sub frugtplukker(ByRef frugtgren as gren)
frugtgren.MovetofirstKnop 'find den første knop (gren eller frugt) While Not frugtgren.end_of_frugtgren 'indtil enden af grenen Select Case frugtgren.knop 'er knoppen en gren eller frugt ? Case frugt Call plukfrugt 'knoppen er en frugt. PLUK! Case kvist Call frugtplukker(frugtgren.knop) 'knoppen er en gren. start frugtplukkeren ud af denne gren End Select frugtgren.findnextknop 'find den næste knop Wend 'indtil enden af grenen
End Sub
I tilfælde af ASP kan en gren være et recordset og en knop være en record. Det kræver nok lidt justeringer. Men dette er kun ment som beskrivelse og ikke løsning.
Som sagt fik jeg det til at virke vha. den rekursive funktion. Jeg syntes at både the_bma_man og kronsj fortjener point, så hvis kronsj "smider" et svar, så kan I dele.
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.