Vill skapa en länknavigering, tänkte en liknande rekursiv funktion/sub. Men problemet är att länkarna hamnar i fel ordning. Måste man slänga in allt i en array och vända på ordningen i den eller funkar det att göra det "direkt" i subben?
sub linktree(connection,parentid)
Dim rs : Set rs = connection.execute("SELECT relid, linktext FROM links WHERE id = " & parentid)
Do While Not rs.eof
Response.Write rs(1) & " » "
linktree connection, rs(0)
rs.movenext
Loop
end sub
linktree connection, 4
Tabell links
id | linktext | relid
-----------------------
1 Vägarbeten 0
2 Beläggningar 1
3 Asfalt 2
4 Oljegrus 2
Min sub listar ju i ordningen:
Oljegrus » Beläggningar » Vägarbeten »
Ifall du hämtar alla länkar och lägger in resultatet i en array med GetRows, så att du kan loopa igenom arrayen istället för att ställa en databasfråga för varje länk, så blir koden avsevärt mycket snabbare.
Jag skapar ju inga nya recordset jag återanvänder det.
Nej, det gör du inte. När du anropar Execute så skapas ett nytt recordset.
Jesper T skrev:
Visst, funkar det med getrows så gärna för mig, men likväl så måste väl posterna hämtas rekursivt.
Nej, de behöver inte hämtas rekursivt, de behöver bara visas rekursivt.
Jesper T skrev:
Hur tänker du dig likande funktion med getrows?
Hämta alla länkarna innan du anropar subrutinen. I subrutinen loopar du igenom arrayen och visar de länkar som ska visas på den nivån, istället för att ställa en databasfråga som hämtar länkarna för den nivån.
Dim arrLinks
arrLinks = GetRows("SELECT id, relid, linktext FROM links")
Sub navTree(intParent) : Dim X
For X = 0 to Ubound(arrLinks, 2)
If arrLinks(0,X) = intParent then
Call navTree(arrLinks(1,X))
Response.Write arrLinks(2,X) & " » "
End If
Next
End Sub
If IsArray(arrLinks) Then Call navTree(4)
266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25