---
title: "Rekursiv funktionshjälp efterlyses"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/103116-rekursiv-funktionshjälp-efterlyses"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Jesper T"
published: "2004-05-06T14:14:48.000Z"
updated: "2004-05-12T06:47:56.000Z"
replies: 19
views: 559
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/103116-rekursiv-funktionshjälp-efterlyses"
---

# Rekursiv funktionshjälp efterlyses

## #1 — Jesper T, 2004-05-06T14:14Z

Databasstruktur

```
[b]tbl links[/b]
-----------------------------------------------
l_id | l_parentid | l_linktext | l_linkurl
-----------------------------------------------
```

Jag skulle vilja få ut det så här:
Först alla länkar utan parentid

1 \| 0 \| Hem \| index.asp
2 \| 0 \| Länkar \| links.asp
3 \| 0 \| Kontakt \| contact.asp

Sedan alla länkar som "pekar" mot ett id.
4 \| 1 \| Roliga saker \| rs.asp
5 \| 1 \| Köp \| buy.asp

6 \| 2 \| Våra länkar \| olinks.asp
7 \| 2 \| Era länkar \| ylinks.asp

osv.
Tips?

Permalänk: https://www.webforum.nu/p/103116

## #2 — cyprys, 2004-05-06T14:18Z

```
select * from tbl_links order by l_parentid asc
```

Eller har jag missförstått?

Permalänk: https://www.webforum.nu/p/1342215

## #3 — LarsG, 2004-05-06T16:59Z

```

  sub tree(connection,parentid,level)
      dim rs
      set rs = connection.execute("select l_id,l_linktext, l_linkurl from tbl_links where parentid = " & parentid)
      while not rs.eof
            response.write replace(spaces(level)," ","-") & ">" & rs(1) & " " & rs(2) & "<br>"
            tree connection,rs(0),level+1
            rs.movenext
      wend 
  end sub
```

Permalänk: https://www.webforum.nu/p/1342304

## #4 — Erik Juhlin, 2004-05-06T19:03Z

Du Lars, ser att du återanvänder connectionobjektet. Tjänar man mycket prestanda på det?

Permalänk: https://www.webforum.nu/p/1342342

## #5 — LarsG, 2004-05-06T19:40Z

Beror väl på. Det sägs att om man har en väldigt hög belastning så kan man tjäna på att inte återanvända. Det är nog ganska många faktorer som spelar in.

Permalänk: https://www.webforum.nu/p/1342365

## #6 — Jesper T, 2004-05-07T06:32Z

> **cyprys skrev:**
>
> ```
> select * from tbl_links order by l_parentid asc
> ```
>
> Eller har jag missförstått?

Nästan.
Men jag kan inte loopa ut allt i en hög utan måste in med lite saker i mellan.
Det är till en javascriptmeny och principen är denna:

```
myMenu = new mainMenu('#FFFFFF', '#DFDFDF');

  myMenu.addMenuLink('Hem', 'index.asp');
  myMenu.addMenuLink('Kontakt', 'contact.asp');
  myMenu.addMenuLink('Länkar', 'links.asp');

myMenu = new subMenu('1', '#FFFFFF', '#888888');
  
  myMenu.addMenuLink('Roliga saker', 'rs.asp');
  myMenu.addMenuLink('Köp', 'buy.asp');  
  
myMenu = new subMenu('3', '#FFFFFF', '#888888');
  
  myMenu.addMenuLink('Våra länkar', 'olinks.asp');
  myMenu.addMenuLink('Era länkar', 'ylinks.asp');
```

Och det gör att jag inte heller kan använda LarsG´s sub heller, eftersom att den nästlar in "submenyerna" bland "grundlänkarna".

Permalänk: https://www.webforum.nu/p/1342523

## #7 — Jesper T, 2004-05-07T11:08Z

Tips?

Permalänk: https://www.webforum.nu/p/1342681

## #8 — Macce, 2004-05-07T13:42Z

Kolla in skriptarkivet, där ligger en rekursiv lösning som borde vara till hjälp...

Permalänk: https://www.webforum.nu/p/1342739

## #9 — Jesper T, 2004-05-07T13:51Z

Nej, den du gjort liknar den LarsG visade.

```
Link 1 
Link 2
---Sub 2:1:1
---Sub 2:1:2
------Sub 2:2:1
Link 3
```

osv.
Jag skulle villja ha det:

```
Link 1 
Link 2
Link 3
Sub 2:1:1
Sub 2:1:2
Sub 2:2:1
```

Permalänk: https://www.webforum.nu/p/1342744

## #10 — cyprys, 2004-05-07T14:08Z

Är inte min kod så?
Du kanske vill sortera såhär bara?

```
select * from tbl_links order by l_parentid asc, [b]I_id asc[/b]
```

Permalänk: https://www.webforum.nu/p/1342754

## #11 — cyprys, 2004-05-08T09:35Z

Ahaaaa. Nu kanske jag förstår vad du menar. 
Du vill jämföra parentID med det från posten innan. 
Skulle de vara olika vill du skriva ut en extra rad i ditt javascriptscript?
Tillfälliga variablar känns som en god vän i dessa sammanhang, utifrån min ovanstående sql-sats.

```
dim sql, i, tmpParent
tmpParent = "0"
sql = "select * from tbl_links order by l_parentid asc, I_id asc"
set rs = conn.execute(sql)
i = 1
do until rs.eof

  if not tmpParent = "0" then
    ' Inte första raden
    if tmpParent = rs("l_parentId") then
      ' Den här posten tillhör samma parentId som posten innan
      ' Så den kan man kanske bara skriva ut
    else
      ' Denna post tillhör ett nytt parentId
      ' Här kanske vi lägger in en ny [i]new submenu[/i] samt skriver ut posten
    end if
  else
    ' Whohooooo Första raden!
    ' Lägga in vår [i]myMenu = new mainMenu('#FFFFFF', '#DFDFDF');[/i] här kanske?
  end if

i = i - -1
tmpParent = rs("l_parentId")
rs.moveNext
loop
```

Nu har jag lagt med en i-variabel som adderar 1 för varje loop. Du kan styra dess värde att överensstämma med det tal du behöver i *new subMenu('**1**', '#F...*

Permalänk: https://www.webforum.nu/p/1343096

## #12 — Jesper T, 2004-05-08T09:46Z

Ok, men det ända som händer är att denna del skrivs ut:
   

```
' Whohooooo Första raden!
    ' Lägga in vår myMenu = new mainMenu('#FFFFFF', '#DFDFDF'); här kanske?
```

(Lika många gånger som poster i menyn)

Permalänk: https://www.webforum.nu/p/1343103

## #13 — cyprys, 2004-05-08T10:18Z

```
tmpParent = cInt(rs("l_parentId"))
```

Permalänk: https://www.webforum.nu/p/1343113

## #14 — Jesper T, 2004-05-10T06:25Z

Gjorde ingen skillnad.

Permalänk: https://www.webforum.nu/p/1343821

## #15 — cyprys, 2004-05-10T07:05Z

Då låter vi den vara "id" istället. 
Typen variant är väl underbar. :) 

se redigering

Permalänk: https://www.webforum.nu/p/1343834

## #16 — Jesper T, 2004-05-10T08:55Z

Ok, funkar även med cInt nu.

Kvarstår nu ett problem...
Om det nu skall skrivas ut en submeny så skall även "positionen" anges.

```
(1)Båtar
(2)Bilar
(3)Flyg
```

Om det nu skall vara en submeny till "Bilar" så skall submenyn börja med 2 
Är det sedan fler submenyer så skall det hela separeras med ett "i" med efterföljande position i submenyn. osv.
Tips?

Permalänk: https://www.webforum.nu/p/1343863

## #17 — cyprys, 2004-05-10T14:28Z

Du kan ju stoppa in fler räknarvariabler. 
subI som nollställs varje gång du byter submeny.
subICount som adderas + 1 för varje gång du byter submeny t.ex. 

Vet inte riktigt hur du vill ha det men du har ju if-satserna klara i loopen för att styra flera olika variabler och räkna hur du vill egentligen.

Permalänk: https://www.webforum.nu/p/1344014

## #18 — Jesper T, 2004-05-10T15:08Z

Ok, här är ett [exempel](http://member.webforum.nu/Jesper%20T/mymenu.html). 
Jag har skrivit ut menyordningen(som även finns i källan).
Jag har lite svårt att få till submenyerna, antar att det inte är helt lätt... :)

Permalänk: https://www.webforum.nu/p/1344034

## #19 — Jesper T, 2004-05-10T23:06Z

Ok, jag skippar denna variant.
Tillbaka till ruta 1:

Går det med LarsG:s sub...

```
 sub tree(connection,parentid,level)
      dim rs
      set rs = connection.execute("select l_id,l_linktext, l_linkurl from tbl_links where parentid = " & parentid)
      while not rs.eof
            response.write replace(spaces(level)," ","-") & ">" & rs(1) & " " & rs(2) & "<br>"
            tree connection,rs(0),level+1
            rs.movenext
      wend 
  end sub
```

...att skapa ett litet system för att skriva ut hierarkien dynamiskt?
(Alltså så att det fetmarkerade skrivs ut.)
ex.

```
Länk[b]1[/b]
Länk[b]2[/b]
    Länk [b]2_1[/b]
    Länk [b]2_2[/b]
    Länk [b]2_3[/b]
        Länk [b]2_3_1[/b]
        Länk [b]2_3_2[/b]
Länk[b]3[/b]
    Länk [b]3_1[/b]
Länk[b]4[/b]
```

Permalänk: https://www.webforum.nu/p/1344199

## #20 — Jesper T, 2004-05-12T06:47Z

Fick lite hjälp på annat håll.

```
Sub tree(connection,parentid,level,ByVal numbers)
    Dim rs, count
    Set rs = connection.Execute("select l_id,l_linktext, l_linkurl from tbl_links where parentid = " & parentid)
    If Len(numbers)>0 Then numbers = numbers & "_"
    count = 1
    Do Until rs.EOF
        Response.Write String(level,"-") & ">" & rs(1) & " " & rs(2) & " " & numbers & count & "<br>"
        tree connection, rs(0), level + 1, numbers & count
        rs.Movenext
        count = count + 1
    Loop
End Sub
```

Permalänk: https://www.webforum.nu/p/1344796

---

Tråden på webben: https://www.webforum.nu/amne/asp/103116-rekursiv-funktionshjälp-efterlyses
