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

Träd igen...


Bjorn

Rekommendera Poster

Kan någon hjälpa mig?

Jag behöver göra ett träd listning, alltså ett hirarkiskt träd. Vet att man ska göra en rekursiv funktion men hur? Har letat på nätet men alla exempel e så avancerade, jag behöver bara grund funktionen.

jag vill lista det så här:

 

root

sida1

sida2

sida2-1

sida2-2

sida3

osv..

 

i databasen finns ID, parenID & titel

 

å jag vill ha samma data plus vilken nivå sidan ligger på.

 

inga små krav...he he he,

Ok, e det någon som kan hjälpa, å svara inte att jag ska söka på nätet för det har jag gjort.

/björn

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Två funktioner som bygger ett hierarkiskt träd till ett diskussionsforum.

Tabellen tblDiscussion innehåller bl.a. ID och parentID

 

Den lagrade proceduren jag använder ser ut:

 

CREATE PROCEDURE sp_SelectDiscussion

(

@parentID uniqueidentifier=null,

@iDayCount int=null

)

AS

 

select

ID,

parentID,

subject,

author,

convert(varchar(10),date,120) 'date'

from

tblDiscussion

where

(parentID=@parentID

or

(@parentID is null and parentID is null))

and

(subject in

(select

subject

from

tblDiscussion d2

where

datediff(d,date,getdate())<=@iDayCount

) or @iDayCount is null)

 

De två ASP-funktionerna:

Function DISC_PrintDiscussionTree(nDays)

dim oRS

dim iDays

if len(nDays)=0 then

iDays=30

else

iDays=nDays

end if

set oRS=objConn.execute("sp_SelectDiscussion null," & iDays )

do until oRS.eof

Response.Write "<a href='default.asp?cmd=discuss&subCmd=view&ID=" & server.URLEncode(oRS("ID")) & "'>" & oRS("subject") & " - " & oRS("author") & " - " & oRS("Date") & "</a>"

call DISC_PrintChildren(ors("ID"))

Response.Write "<br>"

oRS.movenext

loop

oRS.close

set oRS=Nothing

End Function

 

Function DISC_PrintChildren(uiParent)

dim oRSParent

set oRSParent=objConn.execute("sp_SelectDiscussion '" & uiParent & "'")

if not oRSParent.eof then

Response.Write "<ul type=square>"

do until oRSParent.eof

Response.Write vbcrlf & "<li scrolleft=1 scrolltop=1><a href='default.asp?cmd=discuss&subCmd=view&ID=" & server.URLEncode(oRSParent("ID")) & "'>" & oRSParent("subject") & "-" & oRSParent("author") & "-" & oRSParent("Date") & "</a>" & vbcrlf

call DISC_PrintChildren(oRSParent("ID"))

Response.write "</li>" & vbcrlf

oRSParent.movenext

loop

oRSParent.close

set oRSParent=nothing

Response.Write "</ul>"

end if

End Function

 

 

 

Länk till kommentar
Dela på andra webbplatser

Tjena..

Med lite klurande lyckades jag få ordning på det,, tack.

Fortfarande intresserad om någon har något annat sätt att göra det..

/björn

 

Länk till kommentar
Dela på andra webbplatser

  • 1 month later...

Tjena..

 

Dessa två funktioner funkar ok, men.

skulle man inte kunna göra en vbscript funktion som fixar det hela..

typ om man lägger in alla sider i en array..

 

/b.

 

 

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...