---
title: "Forum: Trädstrukturs loop?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/10729-forum-trädstrukturs-loop"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Lukaspojken"
published: "2001-06-18T23:23:00.000Z"
updated: "2001-07-23T12:08:00.000Z"
replies: 24
views: 344
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/10729-forum-trädstrukturs-loop"
---

# Forum: Trädstrukturs loop?

_Sida 1 av 2._

## #1 — Lukaspojken, 2001-06-18T23:23Z

Jag vet hur jag ska upptäcka det första länk-skiktet till huvudinläggen men jag vet inte hur jag ska skriva ut det resterande skick...dvs

Huvudinlägg
Re: inlägg    (Första länk-skiktet)
Re: Re: inlägg (Andra länk-skiktet)
etc.

Koden för att loopa fram första länk-skiktet är

```
Visa = "SELECT * FROM forum WHERE msgUnderId=" & HuvudInlagg
RecSet.Open Visa, Connect, 3, 3 

Do While Not RecSet.EOF

<a ref="forum.asp?&Inlagg=<% =RecSet("msgId") %>"><% =RecSet("msgTopic")%></a>

RecSet.MoveNext
Loop
```

msgUnderId värdet har dess förälder msgID...nån???

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

## #2 — Vide, 2001-06-19T06:33Z

Du får först skapa en funktion som hämta inlägget beroende på vilket id du skickar med, och den funktionen så anropar du på samma funktion med "barnens" id, på så sätt kommer det att bli trådat. Men du skall akta dig för att loopa rekursivt (som det heter), det kan lätt loopas till oändlighet om man kodat fel.

```
Function getMess(id)
'massa kod som hämtar inlägget
'Om det finns "barn" till inlägget så anropar du denna funktionen igen med barnets värde
End Function
```

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

## #3 — Lukaspojken, 2001-06-19T06:46Z

Jag ser det inte riktigt framför mig Víde...försöker vända och vrida på det men ser inte riktigt hur koden skulle se ut...grr..svårt...

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

## #4 — Lukaspojken, 2001-06-19T06:52Z

Vad tror du om denna struktur Vide?

\[Tabell:forum\]
msgID
Thread_ID
Thread_Parent
Thread_Level
msgText
etc.

Dvs att man lägger till de tre kolumnerna Thread...idag har jag i princip bara Thread_Parent som är msgUnderId?

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

## #5 — Janspeed, 2001-06-19T07:32Z

Du kan ju kanske också prova att lägga dina recordsets i en matris och på så sätt ordna dina inlägg i rätt ordning?

Man måste ju inte sortera allt genom SQL-frågan. :)

/JANspeed

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

## #6 — Lukaspojken, 2001-06-19T07:35Z

vad innebär det med matris Janspeed...har aldrig hört talas om att man kan sortera på det sättet...hur gör man?

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

## #7 — jepsO, 2001-06-19T07:46Z

Om ni tar en titt på [bwsm.cjb.net](http://www.unosbrodyr.com/bwsm/index.asp) och forumet där så kan jag beskriva lite kort hur jag gjorde:

Istället för att använda en rekursiv funkion använder jag ReplyOrder och Level.
ReplyOrder anger i vilken ordning svaret ska visas under första inlägget i tråden. Om man svarar på ett inlägg med ReplyOrder = 3 får det nya inlägget ReplyOrder = 4 och alla med ReplyOrder \>= 4 får sitt värde ökat med 1.
Level anger hur stort indraget ska vara. Det är inte svårare än att man kontrollerar vilket värde Level har på inlägget man svarar på och sätter det till Level = Level + 1. Indraget gör jag sedan såhär:

```
<div style="padding-left:<%=rs("Level")*15%>">text</div>
```

Tanken var att jag skulle lägga upp koden till forumet under wF Script, men jag har haft det lite körigt på sistone samt varit lat ;).

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

## #8 — Lukaspojken, 2001-06-19T07:53Z

Det var väldigt smart men hur vet du att ett inlägg ska vara under ett annat?

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

## #9 — Vide, 2001-06-19T08:00Z

Jag skulle bara använt ett fält för id, och ett fält för parent_id.

Och när man skapar inlägget så lägger man ju in vilket inlägg man svara på, och det id:t lägger man i fältet "parent_id".

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

## #10 — jepsO, 2001-06-19T08:03Z

Alla svar har ett startID som anger vilken tråd de tillhör. För att sedan lista inläggsträden tog jag råd av min ASP-gud Bill Wilkinsons [artikel](http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=154). 
Dock måste hans SQL-sats modifieras en smula för att passa forumet. Annars visas inte inlägg utan svar.
Hans SQL-sats:

```
SQL = "SELECT * FROM Teams, Players " _
        & "WHERE Players.TeamID = Teams.TeamID " _
        & "ORDER BY Teams.TeamName, Players.PlayerName"
```

Skriv istället såhär (och anpassa till forumet):

```
SQL = "SELECT * FROM Teams LEFT JOIN Players " _
       & "ON Players.TeamID = Teams.TeamID " _
       & "ORDER BY Teams.TeamName, Players.PlayerName"
```

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

## #11 — Lukaspojken, 2001-06-19T08:42Z

Vide \> Det är så jag gjort idag...men jag förstår inte hur jag ska skapa trädet? får bara fram första skiktet...

jepsO \> Varför kör du join? Hur skulle sql-uttrycket se ut med följande tabell?

\[Tabell:forum\]
msgID
Thread_ID
Thread_Parent
Thread_Level
msgText
etc.

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

## #12 — jepsO, 2001-06-19T08:50Z

För att det ska fungera måste du ha en tabell för nya inlägg och en för svar. Jag kallar mina *Newthreads* och *Replies*.

**Newthreads:**
newID (räknare)
övriga fält (rubrik, inlägg, datum etc)

**Replies:**
repID (räknare)
threadID (anger vilken tråd svaret tillhör)
lvl (beskrevs ovan)
ReplyOrder (beskrevs ovan)
övriga fält

**SQL-sats:** (på ett ungefär)

```
SQL = "SELECT * FROM Newthreads LEFT JOIN Replies " _
& "ON Newthreads.newID = Replies.threadID " _
& "ORDER BY Newthreads.newID DESC, Replies.ReplyOrder"
```

Trixa på :)

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

## #13 — Lukaspojken, 2001-06-19T08:55Z

Man behöver väl inte två tabeller för det...vad är fördelen med det egentligen?

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

## #14 — jepsO, 2001-06-19T08:57Z

Tveksamt om du kan fixa trädstrukturen annars... Kolla Bill Wilkinsons artikel, den jag utgick ifrån. JOIN-satsen krävs som sagt för att visa inlägg utan svar, dvs motsvarande "tomma lag" i artikeln.

Går på lunch nu, så tänk ut lite frågor tills jag kommer tillbaka ;)

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

## #15 — Lukaspojken, 2001-06-19T09:47Z

Jag har sett trädstruktur med en tabell...så det egentligen borde det vara helt onödigt med två tabeller...vad är syftet...vad är det man kan uppnå med det istället för att använda två tabeller...jag definierar alla huvudinlägg i fältet msgUnderId som 0...och på så sätt borde man kunna köra en tabell...

Men som sagt...jag ser fortfarande inte riktigt hur den sql-satsen du gav skulle kunna skapa en trädstruktur...

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

## #16 — jepsO, 2001-06-19T09:58Z

Den i sig kan inte skapa trädstrukturen. Koden för detta står i artikeln.

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

## #17 — Lukaspojken, 2001-06-19T10:08Z

"ReplyOrder anger i vilken ordning svaret ska visas under första inlägget i tråden. Om man svarar på ett inlägg med ReplyOrder = 3 får det nya inlägget ReplyOrder = 4 och alla med ReplyOrder \>= 4 får sitt värde ökat med 1."

Jag tror jag fått lite aha-upplevelse...kan du bara förklara det med ReplyOrder igen. Förstår inte riktigt det sista du sa "alla med ReplyOrder \>= 4 får sitt värde ökat med 1.".

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

## #18 — jepsO, 2001-06-19T11:05Z

Säg att du har följande inlägg. ro = ReplyOrder, lvl = indrag.

\-Hejsan på er (ro = 0, lvl = 0)
\-----Re: Hejsan på er (ro = 1, lvl = 1)
\-----------Re: Re: Hejsan på er (ro = 2, lvl = 2)
\-----Hej på dig med (ro = 3, lvl = 1)
\-----Re: Hejsan på er (ro = 4, lvl = 1)

\-Första inlägget! (ro = 0, lvl = 0)

Det enda du använder för att bestämma ordningen på svaren är ReplyOrder.

Vad jag menade med öka med 1 där ReplyOrder \>= 4: Säg att du svarar på svaret "Hej på dig med" (ro = 3, lvl = 1). Svaret till detta meddelande får ro = 4, lvl = 2. Alla underliggande svar får sin ro ökad med 1, dvs "Re: Hejsan på er" (ro = 4, lvl = 1) får sin ro ökad till 5.

Comprendre? :)

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

## #19 — Lukaspojken, 2001-06-19T15:05Z

ok...det var också väldigt smart...men hur ökar jag alla replyorder med ett utan att det går in på andra inlägg en de ska...

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

## #20 — jepsO, 2001-06-20T07:41Z

Något i stil med följande:

```
UPDATE Replies SET ReplyOrder = ReplyOrder + 1 WHERE ReplyOrder >= 4 AND threadID = 2
```

Självklart ersätts 4 och 2 med variabler, men det är ovanstående princip som gäller.

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/10729-forum-trädstrukturs-loop  
Nästa sida: https://www.webforum.nu/amne/asp/10729-forum-trädstrukturs-loop/page2.md
