|
| Loope i array (lidt lang..) Fra : Jacob Nielsen |
Dato : 20-01-03 18:51 |
|
Hej
Jeg har et array som er genereret ud fra et database udtræk med getrows.
Dette ser sådan ud:
strMenuSQL = "SELECT menuID,mName,mLink,parent from cam_menu ORDER BY
parent, menuID ASC"
'## Opretter MenuRS
Set MenuRS = Conn.Execute(strMenuSQL)
'## Smider indholdet af MenuRS ind i et array vha. getRows
If NOT MenuRS.EOF Then
arrMenuRS = MenuRS.GetRows()
max = Ubound(arrMenuRS,2)
Else
max = 0
End If
Dernæst kan jeg så loope med denne Do Loop:
row = 0
Do While (row<=max) '## Looper rækker
'## Definerer variabler
menuID = arrMenuRS(0,row)
mName = arrMenuRS(1,row)
mLink = arrMenuRS(2,row)
If(mLink="null") Then mLink=""
parent = arrMenuRS(3,row)
If (parent<>0) Then
parent = parent
Else
parent=""
End If
'## Udskriv
Response.write "<strong>menuID:</strong> " & menuID & "
<strong>parent:</strong> " & parent & " <strong>Name:</strong> " & mName &
"<br>" & vbcrlf
row = row + 1
Loop
Dette resulterer i følgende output:
menuID: 1 parent: Name: Top element1
menuID: 2 parent: Name: Top element2
menuID: 9 parent: Name: Top Element 3
menuID: 3 parent: 1 Name: Sub element1
menuID: 4 parent: 1 Name: Sub element2
menuID: 5 parent: 2 Name: Sub element1
menuID: 6 parent: 2 Name: Sub element2
menuID: 7 parent: 4 Name: Sub element1
menuID: 13 parent: 4 Name: Sub element2
menuID: 8 parent: 7 Name: Sub element1
menuID: 12 parent: 7 Name: Sub element2
Det er også fint nok sådan da, men jeg ville gerne ha' det skrevet ud så den
skrev menuID efterfulgt af de parent der svarede til menuID, altså f.eks.
således:
menuID: 1 parent: Name: Top element1
menuID: 3 parent: 1 Name: Sub element1
menuID: 4 parent: 1 Name: Sub element2
menuID: 7 parent: 4 Name: Sub element1
menuID: 8 parent: 7 Name: Sub element1
menuID: 12 parent: 7 Name: Sub element2
menuID: 13 parent: 4 Name: Sub element2
menuID: 2 parent: Name: Top element2
menuID: 5 parent: 2 Name: Sub element1
menuID: 6 parent: 2 Name: Sub element2
menuID: 9 parent: Name: Top Element 3
Er der nogle der har en god idé til dette? Jeg har set mig blind på
løsningen i hvert fald :)
Mvh. Jacob
| |
F.Larsen (22-01-2003)
| Kommentar Fra : F.Larsen |
Dato : 22-01-03 15:55 |
|
"Jacob Nielsen" <jacob.nielsenREMOVE@REMOVEget2net.dk> wrote in message
news:OEWW9.9959$vZ5.2363@news.get2net.dk...
> strMenuSQL = "SELECT menuID,mName,mLink,parent from cam_menu ORDER BY
> parent, menuID ASC"
>
> Det er også fint nok sådan da, men jeg ville gerne ha' det skrevet ud så
den
> skrev menuID efterfulgt af de parent der svarede til menuID, altså f.eks.
> således:
skal du så ikke bare sortere på parent, menuID ?
--
Flemming
http://home.cbkn.dk/Spyware/
http://home.cbkn.dk/Spam/
| |
Jens Gyldenkærne Cla~ (22-01-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 22-01-03 16:53 |
|
F.Larsen skrev:
>> strMenuSQL = "SELECT menuID,mName,mLink,parent from cam_menu
>> ORDER BY parent, menuID ASC"
> skal du så ikke bare sortere på parent, menuID ?
Det gør han allerede - men det samler alle topmenuerne først.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
F.Larsen (22-01-2003)
| Kommentar Fra : F.Larsen |
Dato : 22-01-03 18:31 |
| | |
F.Larsen (22-01-2003)
| Kommentar Fra : F.Larsen |
Dato : 22-01-03 18:31 |
| | |
Jens Gyldenkærne Cla~ (22-01-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 22-01-03 18:39 |
|
F.Larsen skrev:
> så prøv omvendt -> menuID, parent
Det er ikke meget bedre. Det vil blot liste menupunkterne i den
rækkefølge de er oprettet (forudsat at menuID er et
autonummerfelt).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Jens Gyldenkærne Cla~ (22-01-2003)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 22-01-03 18:57 |
|
Jacob Nielsen skrev:
> Er der nogle der har en god idé til dette? Jeg har set mig
> blind på løsningen i hvert fald :)
Et forslag.
SELECT <feltliste>
FROM menu m1 INNER JOIN menu m2
ON m2.parentid = m1.menuid
ORDER BY m2.parentid, m2.menuid
Det giver en liste hvor topmenunavnet findes i ét felt, mens
undermenunavnene findes i et andet - og så fungerer sorteringen.
Men det virker kun i et fastlagt antal niveauer (her 2) og det
kræver også at menuen er lige dyb alle steder (en topmenu der ikke
har undermenuer vil ikke komme med).
Man kan udbygge niveauerne ved at lægge flere joins på, men der vil
stadig være ovennævnte problemer. De kan muligvis undgås - men det
er ikke nok blot at skifte til LEFT JOIN.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Jacob Nielsen (23-01-2003)
| Kommentar Fra : Jacob Nielsen |
Dato : 23-01-03 14:54 |
|
"Jens Gyldenkærne Clausen" <jc@dmf.dk> wrote in message
news:Xns930BC0CA8CCA5jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Jacob Nielsen skrev:
>
> > Er der nogle der har en god idé til dette? Jeg har set mig
> > blind på løsningen i hvert fald :)
>
> Et forslag.
>
<SNIP FORSLAG>
Mange tak, men jeg har i mellemtiden selv fundet en løsning. Det er ikke
verdens pæneste og bestemt ikke den mest performance venlige, men her er
den:
Sub subShowSubMenu (ByRef varMenuID, parentID, Level)
strSubMenuItemsSQL = "SELECT * FROM cam_menu WHERE parent_pid = " &
varMenuID & " ORDER BY menu_sortorder ASC"
Set SubMenuRS = Conn.Execute(strSubMenuItemsSQL)
Do until SubMenuRS.EOF
intLevel = 0
Response.Write "<img src=""" & strPathAdmin & "/img/space.gif"" width="""
& Level*20 & """ height=""1"">"
If SubMenuRS("show_status") = "1" Then
Response.Write "- <font color=""#FF0000"">" & SubMenuRS("menu_name") &
funcInsertImageLevels("" & intModuleID & "","" & SubMenuRS("pid") & "","" &
SubMenuRS("menu_sortorder") & "") & "</font><br>" & vbCrlf
Else
Response.Write "- " & SubMenuRS("menu_name") & funcInsertImageLevels("" &
intModuleID & "","" & SubMenuRS("pid") & "","" & SubMenuRS("menu_sortorder")
& "") & "<br>" & vbCrlf
End If
Call subShowSubMenu(SubMenuRS("pid"), SubMenuRS("parent_pid"), Level+1)
SubMenuRS.MoveNext
Loop
SubMenuRS.Close
Set SubMenuRS = Nothing
End Sub
Denne sub-procedure bliver så kaldt i min løkke der så kun udskriver
top-level punkterne.
Funktionen funcInsertImageLevels udskriver nogle billeder efter det enkelte
menupunkt.
Mvh. Jacob
| |
|
|