---
title: "Skriv ut trädstruktur?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/167554-skriv-ut-trädstruktur"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "jimpa"
published: "2007-12-23T22:12:58.000Z"
updated: "2007-12-29T19:00:22.000Z"
replies: 20
views: 1043
page: 1
pages: 2
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/167554-skriv-ut-trädstruktur"
---

# Skriv ut trädstruktur?

_Sida 1 av 2._

## #1 — jimpa, 2007-12-23T22:12Z

Hej

Jag har två tabeller med följande struktur:

Categori
\-------
CatID
CatName

Forum
\--------
ForumID
ForumParentID
CatID
ForumName

Meningen är att man ska kunna ha obegränsat kategorier och forum och för varje forum ska man även kunna lägg till ett eller flera underforum 

Problemet blir ju nu hur man ska kunna lista alla kategorier med tillhörande forum och underforum. 

Är det någon som har provat på något liknande o har en lösning på detta?

MVH,
Jimpa

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

## #2 — Ledel, 2007-12-24T09:14Z

Börja med att loopa igenom alla kategorier, och för varje kategori plockar du ut alla knutna forum, Forum.CatID = Category.CatID. Sen, för varje forum, plockar du ut alla forum där ForumParentID = ForumID.

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

## #3 — jimpa, 2007-12-24T09:31Z

Tack för dit svar!

Men jag förstår inte riktigt hur det ska gå till... har du nåt exempel?

Resultatet ska exempelvis bli:

```
Categori 1
 -Forum1
    -Sub Forum
       -Sub sub forum
       -Sub sub forum
          -Sub sub sub forum
 -Forum2
    -Sub Forum
       -Sub sub forum
       -Sub sub forum
          -Sub sub sub forum
Categori 2
 -Forum3
    -Sub Forum
       -Sub sub forum
       -Sub sub forum
          -Sub sub sub forum
 -Forum4
    -Sub Forum
       -Sub sub forum
       -Sub sub forum
          -Sub sub sub forum
```

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

## #4 — Jesper T, 2007-12-24T19:45Z

Hej,
sök på *rekursiv*  eller *rekursion*  i detta forum så kommer du hitta det du söker.

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

## #5 — nitro2k01, 2007-12-24T21:20Z

> **Ledel skrev:**
>
> Börja med att loopa igenom alla kategorier, och för varje kategori plockar du ut alla knutna forum, Forum.CatID = Category.CatID. Sen, för varje forum, plockar du ut alla forum där ForumParentID = ForumID.

Men, går det att göra i en och samma SQL-fråga? Om man måste köra en fråga per förgrening kan det ju bli ganska slött i längden.

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

## #6 — spango, 2007-12-25T11:50Z

> **nitro2k01 skrev:**
>
> Men, går det att göra i en och samma SQL-fråga?

Nej, men man kan plocka fram alla rader ur tabellen, och sedan bygga upp ett träd i sitt program.

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

## #7 — jimpa, 2007-12-26T13:54Z

> **Jesper T skrev:**
>
> Hej,
> sök på *rekursiv*  eller *rekursion*  i detta forum så kommer du hitta det du söker.

Jag sökte på det och läste igenom trådarna men jag fattar inte... Ingen som har ett lite exempel kod hur man göra detta?

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

## #8 — voigtann1, 2007-12-28T09:04Z

> **jimpa skrev:**
>
> Jag sökte på det och läste igenom trådarna men jag fattar inte... Ingen som har ett lite exempel kod hur man göra detta?

<http://www.webforum.nu/showthread.php?p=1060933#post1060933> där är ett kod exempel när jag sökte på 'rekursiv' så hittade jag ett exempel.

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

## #9 — jimpa, 2007-12-28T13:29Z

> **voigtann1 skrev:**
>
> <http://www.webforum.nu/showthread.php?p=1060933#post1060933> där är ett kod exempel när jag sökte på 'rekursiv' så hittade jag ett exempel.

Tack! Den tråden missade jag!

Jag utgick från den koden o ändra lite. Jag har fått det att funka ganska bra :)  Dock ett problem! Jag får inte indragen att stämma riktigt. 

Någon som har en idé om hur man kan få till det?

Utskriften blir så här:

```
Category 1
Main Forum 1 (Category 1)
 Sub Forum 1 (Main Forum 1)
  Sub Sub Forum 1 (Sub Forum 1)
   Sub Sub Sub Forum 1 (Sub Sub Forum 1)
    Sub Sub Forum 2 (Sub Forum 1)
Category 2
Main Forum 2 (Category 2)
 Sub Forum 2(Main Forum 2)
```

 

Jag vill ha det så här:

```
Category 1
Main Forum 1 (Category 1)
 Sub Forum 1 (Main Forum 1)
  Sub Sub Forum 1 (Sub Forum 1)
   Sub Sub Sub Forum 1 (Sub Sub Forum 1)
  Sub Sub Forum 2 (Sub Forum 1)  <--------------------
Category 2
Main Forum 2 (Category 2)
 Sub Forum 2(Main Forum 2)
```

 

```
sub check(parentID,indrag)
  set rs1 = Conn.execute("SELECT ForumID, fName FROM tblForums WHERE fParentID = " & parentID & " ORDER BY fOrder ASC")
  do until rs1.eof
indrag = indrag + 1

   str = string(indrag, " ")
   str = replace(str, " ", "&nbsp;")
       response.write str
     response.write "" & rs1("fName") & "</a><br>"

    check rs1("ForumID"), indrag
  rs1.movenext
  loop
end sub

set rs2 = Conn.execute("SELECT CategoryID, CatTitle FROM tblCategories ORDER BY CatOrder ASC")
  arrRS = rs2.GetRows() 
 
For i = 0 To Ubound(arrRS, 2)
 
 Response.write "<b>" & arrRS(1,i) & "</b><br>"

set rs = Conn.execute("SELECT ForumID, fName FROM tblForums WHERE fParentID = 0 AND fCategoryID = " & arrRS(0,i) & " ORDER BY fOrder ASC")
do until rs.eof

   response.write rs("fName") & "</a><br>"

  check rs("ForumID"),0 
rs.movenext
loop

Next
```

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

## #10 — spango, 2007-12-28T14:05Z

Tycker det är vettigare att använda nästlade listor istället.

```
sub check(parentID)
  set rs1 = Conn.execute("SELECT ForumID, fName FROM tblForums WHERE fParentID = " & parentID & " ORDER BY fOrder ASC")
  if rs1.RecordCount <> 0 then: 
    response.write "<ul>"
    do until rs1.eof
      response.write "<li><a href=""..."">" & Server.HTMLEncode(rs1("fName")) & "</a>"
      check rs1("ForumID")
      response.write "</li>" 
      rs1.movenext
    loop
    response.write "</ul>"
  endif
end sub
```

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

## #11 — jimpa, 2007-12-28T17:52Z

Mycket bättre :)

Tusen tack för hjälpen!

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

## #12 — jimpa, 2007-12-28T19:17Z

Dock en följd fråga!

Finns det något vettigt sett att skriva ut resultatet med indrag i en  select lista? Misstänker att \<ul\> o \<li\> inte stöds då...

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

## #13 — voigtann1, 2007-12-28T19:29Z

\<select\> och \<ul\> är som du själv skriver helt skilda ting. ;) Du får använda koden du skrev ovan för en select + lite mer kod... ska se om man kan hitta en en lösning...

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

## #14 — voigtann1, 2007-12-29T06:56Z

```
sub check2(parentID)
	set rs1 = Conn.execute("SELECT ForumID, fName FROM tblForums WHERE fParentID = " & parentID & " ORDER BY fOrder ASC")
	If Not rs.EOF Then
		Do Until rs1.EOF
			If parentId > 0 Then
				Execute("indrag" & rs1("ForumID") & " = 1 + indrag" & parentId)
			End If
			str = string(eval("indrag" & parentId), " ")
			str = replace(str, " ", "-")
			Response.Write "<option value=""" & rs1("ForumID") & """>" & str & " " & Server.HTMLEncode(rs1("fName")) & "</option>"
			check2(rs1("ForumID"))
			rs1.MoveNext
		Loop
	End If
End Sub
```

(heter dock check2 så du kan behålla check-sub funktionen).

```
set rs2 = Conn.execute("SELECT CategoryID, CatTitle FROM tblCategories ORDER BY CatOrder ASC")
arrRS = rs2.GetRows()

Response.Write "<select name=""forum"">"
For i = 0 To Ubound(arrRS, 2)
	set rs = Conn.execute("SELECT ForumID, fName FROM tblForums WHERE fParentID = 0 AND fCategoryID = " & arrRS(0,i) & " ORDER BY fOrder ASC")
	do until rs.eof
 		check2 rs("ForumID")
		rs.movenext
	loop
Next
Response.Write "</select>"
```

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

## #15 — jimpa, 2007-12-29T11:59Z

Snyggt!
Går det även att få med 'Main Forum' och kategorierna i listan?

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

## #16 — voigtann1, 2007-12-29T17:01Z

ja... ovanför set rs.... kan du skriva:

```
Response.Write "<option value="" & arrRS(0,i) & "">" & arrRS(1,i) & "</option>"
```

 Det är ju inte så svårt att läsa av koderna från samtliga som har postat i denna tråd att snickra ihop det själv dock ;)

Dock så vet jag inte riktigt hur du har tänkt att lösa det i ett längre flöde när du ska spara data. då "huvud-topic" IDt kan vara samma id som en av dina forum.

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

## #17 — jimpa, 2007-12-29T17:54Z

Nej, det sista borde jag ju klarat själv   :x 

> Dock så vet jag inte riktigt hur du har tänkt att lösa det i ett längre flöde när du ska spara data. då "huvud-topic" IDt kan vara samma id som en av dina forum.

Hur menar du nu   :P

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

## #18 — voigtann1, 2007-12-29T18:19Z

tblCategorys har 3 poster med ID:
1, 2 och 3
och tblForums har 11 poster med IDn:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 och 11. 
DVS det kommer att bli en liten konflikt med tanke av 3x2 av dina totala poster av 11+3  = 14 st som har samma "value" i sin option. Du får komma på en lösning som behandla tblCategorys och tblForums vval.

Ett förslag är kanske ha för tblCategorys idn: value="cat\_\<nummer från tblCategory\>"...

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

## #19 — jimpa, 2007-12-29T18:47Z

För tillfället kommer jag inte få något problem med det då kategorierna bara står som en \<optgroup\> 
Bara forumen kommer att kunna bli valda och dom har ju unika idn!

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

## #20 — voigtann1, 2007-12-29T18:50Z

ta bort value saken från kategori då ;) så löser det sig.

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/167554-skriv-ut-trädstruktur  
Nästa sida: https://www.webforum.nu/amne/asp/167554-skriv-ut-trädstruktur/page2.md
