Jesper TMedlem sedan nov. 20017 144 inläggDatabasstruktur
[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?
cyprysMedlem sedan dec. 20003 563 inläggselect * from tbl_links order by l_parentid asc
Eller har jag missförstått?
LLarsGMedlem sedan dec. 200012 464 inlägg
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
Du Lars, ser att du återanvänder connectionobjektet. Tjänar man mycket prestanda på det?
LLarsGMedlem sedan dec. 200012 464 inlägg 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.
Jesper TMedlem sedan nov. 20017 144 inlägg
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".
MMacceMedlem sedan apr. 2001425 inlägg Kolla in skriptarkivet, där ligger en rekursiv lösning som borde vara till hjälp...
Jesper TMedlem sedan nov. 20017 144 inläggNej, 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
cyprysMedlem sedan dec. 20003 563 inläggÄ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]
cyprysMedlem sedan dec. 20003 563 inläggAhaaaa. 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...
Jesper TMedlem sedan nov. 20017 144 inläggOk, 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)
cyprysMedlem sedan dec. 20003 563 inläggtmpParent = cInt(rs("l_parentId"))
cyprysMedlem sedan dec. 20003 563 inläggDå låter vi den vara "id" istället.
Typen variant är väl underbar. :)
se redigering
Jesper TMedlem sedan nov. 20017 144 inläggOk, 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?
cyprysMedlem sedan dec. 20003 563 inläggDu 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.
Jesper TMedlem sedan nov. 20017 144 inläggOk, här är ett exempel.
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... :)
Jesper TMedlem sedan nov. 20017 144 inläggOk, 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]
Jesper TMedlem sedan nov. 20017 144 inläggFick 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