webForumDet fria alternativet

Forum

ASPur ASP

19 svar · 586 visningar · startad av joel_joel88

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
Frågan#1

Ja håller på med ett enkelt forum.
Min fråga är, hur ska jag göra för att få det att se ut så här när jag ska skriva ut trådarna och svaren.
Altså trådarna ska vara länkar och svaren med. Under trådarna ska respektiva svar för varje tråd lägga sig.

ex.

TRÅD1
-Svaren
TRÅD2
-Svaren

osv........

Troxys avatarTroxyMedlem sedan mars 20041 505 inlägg
#2

Detta är en simpel förklaring, men jag hoppas du förstår iaf:

Det bästa sättet jag vet är att separera trådarna och svaren från varandra i olika tabeller i databasen.

I tabellen med svaren så har du ett fält som talar om vilken tråd svaret tillhör genom att referera till trådens ID.

För varje tråd du visar så hämtar du även svaren till tillhör tråden också.

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#3

Så vet jag att man gör om man ska få fram trådens svar.

Fast jag ska ju ha en lista med rubriker. Tråden ska vara överst, under den så ska svaren vara. Hur fixar man detta, altså svaren ska vara undra varje tråd.

Tror det heter rekursiv eller något.

Bättre exempel...

En tråd
... Re: En tråd
........Re: Tråd
En till tråd
...Re: En till tråd
.......Re: En till tråd

cypryss avatarcyprysMedlem sedan dec. 20003 563 inlägg
#4

Det bästa sättet jag vet är att separera trådarna och svaren från varandra i olika tabeller i databasen.

Håller inte med utan tycker det är bland det dummaste man kan göra. Ett inlägg ska sparas på ett ställe vare sig det är början på en ny tråd, eller ett svar.

Tror det heter rekursiv eller något.

Ditt andra exempel var helt annorlunda än ovan och det heter rekursion det du är ute efter. ;)

Vad man psuedokodmässigt gör.

sub checkanswers(parentID)
  Print(parentID.HeadLine)
  for each child of parentID
    checkanswers(childID)
  next 
end sub

Och den triggas med något liknande

for each new tread
  checkanswers(newThreadID)
next

Och mina for each skulle kunna vara en sql-fråga till exempel där man listar alla svar som har parentID av det inlägget man svarade på.

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#5

Hur ska jag då göra med mitt då?

cypryss avatarcyprysMedlem sedan dec. 20003 563 inlägg
#6

Följa mina exempel eller läsa lite om rekursion eller varför inte lite av båda och testa dig fram? ;)

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#7

ok, fattar inget om detta, men tack ändå.

Någon annan som vet hur man kan göra det på lätt sätt?

desdecadoMedlem sedan juli 2004206 inlägg
#8

cyprys skrev:

Det bästa sättet jag vet är att separera trådarna och svaren från varandra i olika tabeller i databasen.

Håller inte med utan tycker det är bland det dummaste man kan göra. Ett inlägg ska sparas på ett ställe vare sig det är början på en ny tråd, eller ett svar.

Håller inte med, men det kanske beror på hur forumstrukturen ska presenteras. Ska den presenteras som ett utfällt träd så finns det ju inget som heter "tråd" i dess benärkelse, allt är ju poster kopplade till varandra.

För den vanligaste typen av forum där man väljer först Forum, sedan Tråd för att hamna på en sida med poster så är det många fördelar med att ha en tabell med trådar, speciellt om man ska agregera post count, senaste post, etc så att man kan skära bort dyrbara sekundrar från sql-anropen när besökarna och inläggen växer.

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#9

Någon som vet fast inte sett tråden:OO :)

cypryss avatarcyprysMedlem sedan dec. 20003 563 inlägg
#10

Håller inte med, men det kanske beror på hur forumstrukturen ska presenteras. Ska den presenteras som ett utfällt träd så finns det ju inget som heter "tråd" i dess benärkelse, allt är ju poster kopplade till varandra.

Jag tror vi talade om lite olika saker. Det jag menade var att själva första inlägget skulle finnas i en tabell. Med text, skribentID, tidpunkt osv. Men alla svar skulle finnas i en ny tabell med istort sett samma uppbyggnad plus en koppling till någon post i den första tabellen. Det du menar är snarare som ett index innehållandes huvudrubrik och inte mycket mer. :)

joel_joel88 skrev:

Någon som vet fast inte sett tråden:OO :)

Jag har sett, jag vet och jag har visat.
Vi kan försöka igen med ett exempel. Nu utgår vi från att trådarna ligger i en tabell och alla inlägg i en.

sub checkanswers(parentID,vänsterindrag)
  set rs1 = conn.execute("select id, rubrik from inlägg where svartillID = " & parentID)
  do until rs1.eof
    response.write string(".",vänsterindrag) & rs1("rubrik")
    checkanswers(rs1("id"),vänsterindrag + 3)
  rs1.movenext
  loop
end sub

set rs = conn.execute("select rubrik, id from trådar order by senast_uppdaterad desc")
do until rs.eof
  response.write rs("rubrik")
  checkanswers(rs("id"),0)
rs.movenext
loop

Går självklart att optimera och köra en del genvägar här och där, men exemplet ska vara intoducerande till rekursionen i problemet.

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#11

tack cyprys för att du hjälper mig :)

fast jag får detta felmeddelande.

Microsoft VBScript compilation error '800a0414'

Cannot use parentheses when calling a Sub

/forum/index.asp, line 12

checkanswers(rs1("id"),vansterindrag + 3)
-----------------------------------------^

cypryss avatarcyprysMedlem sedan dec. 20003 563 inlägg
#12

;)

Cannot use parentheses when calling a Sub

Du ska nog inte ta min kod bokstavligen. Har nog mer syntaxfel.

Ta bort paranteserna möjligtvis.

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#13

och vad ska jag göra :)

vänsteridrag, är det ett tal jag ska ange? Fattar trögt nu :)

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#14

Jag är nog väldig jobbig nu men kan du inte beskriva mer detaljerat så att en trög person som jag fattar. Vore jätte snällt.

Tackar på förhand

cypryss avatarcyprysMedlem sedan dec. 20003 563 inlägg
#15

Du kan ta bort allt vad heter vansterindrag. Det är precis vad det låter som. Om du studerar koden ser du att det värdet ökar ju djupare i rekursionen du trevar. Samt att den skriver ut ett antal punkter vilket är samma antal som variabeln vansterindrag. Du får alltså precis samma struktur och utskrift som i ditt exempel.

Rekommenderar att du försöker fatta begreppet rekursion genom att titta på olika exempel. Hur det fungerar helt enkelt. Då klarnar nog en del.

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#16

ok, tackar. vet du något bra ställe där det står om rekursion?

cypryss avatarcyprysMedlem sedan dec. 20003 563 inlägg
#17

Mycket exempel om inte annat.

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#18

ok, jag frågade ju om JUST DU visste vart det fanns, inte vart google visste, men tack ändå.

cypryss avatarcyprysMedlem sedan dec. 20003 563 inlägg
#19

Jag vet ju ett ställe!

joel_joel88s avatarjoel_joel88Medlem sedan nov. 20021 222 inlägg
#20

Satt länge och drog mig i håret och tillslut löste jag det så här :birp

<%
sub check(parentID,indrag)
  set rs1 = connect.execute("select id, rubrik from svar where SID = " & parentID)
  do until rs1.eof
indrag = indrag + 1
  response.write "<tr>"
  response.write "<td>"
   str = string(indrag, " ")
   str = replace(str, " ", "&nbsp;")
       response.write str
     response.write "<a href=""read.asp?id=" & rs1("id") & """>Re: " & rs1("rubrik") & "</a>"
    response.write "</td>"
  response.write "</tr>"
    check rs1("id"), indrag
  rs1.movenext
  loop
end sub

set rs = connect.execute("select rubrik, id from trad order by id desc")
do until rs.eof
  response.write "<tr>"
  response.write "<td>"
   response.write "<a href=""read.asp?id=" & rs("id") & """>" & rs("rubrik") & "</a>"
  response.write "</td>"
  response.write "</tr>"
  check rs("id"),0 
rs.movenext
loop
%>
142 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)