Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Ciclo dentro Ciclo

  1. #1

    Ciclo dentro Ciclo

    Sto facendo un ciclo dentro un ciclo per creare un menu ad albero, la struttura del DB è:

    IDMenu ------ IDPadre ------ Voce

    Tutte le voci che hanno IDPadre zero sono voci di primo livello.
    ...in + io ho bisogno di un numero progressivo per ogni voce e sottovoce tipo

    1 --- 0 primo livello
    2 ----1 secondo livello
    3 ----2 terzo livello
    4 ----3 quarto livello

    5 ---- primo livello ancora
    6 ----5 secondo livello
    7 ----5 secondo livello

    etc....

    il primo è il numero progressivo ...il secondo dice di quale livello è e di che gruppo la sottovoce.


    Ci sono quasi ...(forse )... io per fare questo faccio 1 annidamento di cicli sulla stessa tabella ...ora vi posto il codice:

  2. #2
    <%
    Dim voce1, IDMenu, conta1, conta2, conta3, conta4
    set Menu1 = Server.CreateObject("ADODB.Recordset")
    sql = "select * from Menu where IDPadre = 0"
    Menu1.ActiveConnection = cn
    Menu1.Open sql, cn
    conta1 = 0
    %>

    <script type="text/javascript">
    <!--
    d = new dTree('d');
    d.add(0,-1,'');
    <%
    Do while not Menu1.EOF
    IDMenu = Menu1("IDMenu")
    voce1 = Menu1("voce")
    conta1 = conta1 + 1
    %>



    d.add(<%=(conta1)%>,0,'<%=(voce1)%>','example01.as p');


    <%
    Dim voce2, IDPadre2
    set Menu2 = Server.CreateObject("ADODB.Recordset")
    sql2 = "select * from Menu where IDPadre = " & IDMenu
    Menu2.ActiveConnection = cn
    Menu2.Open sql, cn
    conta2 = conta1
    %>

    <%
    Do while not Menu2.EOF
    IDPadre2 = Menu2("IDPadre")
    voce2 = Menu2("voce")
    conta2 = conta2 + 1
    %>

    d.add(<%=(conta2)%>,<%=(conta1)%>,'<%=(voce2)%>',' example01.asp');



    <%
    Dim voce3, IDPadre3
    set Menu3 = Server.CreateObject("ADODB.Recordset")
    sql3 = "select * from Menu where IDPadre = " & IDPadre2
    Menu3.ActiveConnection = cn
    Menu3.Open sql, cn
    conta3 = conta2
    %>

    <%
    Do while not Menu3.EOF
    IDPadre3 = Menu3("IDPadre")
    voce3 = Menu3("voce")
    conta3 = conta3 + 1
    %>

    d.add(<%=(conta3)%>,<%=(conta2)%>,'<%=(voce3)%>',' example01.asp');


    <%
    Dim voce4, IDPadre4
    set Menu4 = Server.CreateObject("ADODB.Recordset")
    sql4 = "select * from Menu where IDPadre = " & IDPadre3
    Menu4.ActiveConnection = cn
    Menu4.Open sql, cn
    conta4 = conta3
    %>

    <%
    Do while not Menu4.EOF
    IDPadre4 = Menu4("IDPadre")
    voce4 = Menu4("voce")
    conta4 = conta4 + 1
    %>

    d.add(<%=(conta4)%>,<%=(conta3)%>,'<%=(voce4)%>',' example01.asp');

    <%
    Menu4.movenext
    loop
    Menu3.movenext
    loop
    Menu2.movenext
    loop
    Menu1.movenext
    loop

    Menu4.close()
    Set Menu4 = nothing
    Menu3.close()
    Set Menu3 = nothing
    Menu2.close()
    Set Menu2 = nothing
    Menu1.close()
    Set Menu1 = nothing
    %>

    document.write(d);

    //-->
    </script>

  3. #3
    non esiste un modo migliore invece che annidare tutti questi cicli?
    perchè veramente non mi piace il codice in quel modo ma è il modo che io conosco

  4. #4
    In poche parole quello che chiedo è ...esiste un modo per evitare 4 cicli dove la struttura è appunto :

    Database
    IDMenu ------ IDPadre ------ Voce

    Tutte le voci che hanno IDPadre zero sono voci di primo livello.
    ...in + io ho bisogno di un numero progressivo per ogni voce e sottovoce tipo

    1 --- 0 primo livello
    2 ----1 secondo livello
    3 ----2 terzo livello
    4 ----3 quarto livello

    5 ---- primo livello ancora
    6 ----5 secondo livello
    7 ----5 secondo livello

    ..sarebbe stupendo fare un "ciclo" dove fino a quando trova IDPadri va avanti a farmi sottomenu ...senza dover aggiungere un ciclo al codice come ho fatto io che ...poi non funziona nemmeno

  5. #5
    Originariamente inviato da nicolal
    In poche parole quello che chiedo è ...esiste un modo per evitare 4 cicli dove la struttura è appunto :

    Database
    IDMenu ------ IDPadre ------ Voce

    Tutte le voci che hanno IDPadre zero sono voci di primo livello.
    ...in + io ho bisogno di un numero progressivo per ogni voce e sottovoce tipo

    1 --- 0 primo livello
    2 ----1 secondo livello
    3 ----2 terzo livello
    4 ----3 quarto livello

    5 ---- primo livello ancora
    6 ----5 secondo livello
    7 ----5 secondo livello

    ..sarebbe stupendo fare un "ciclo" dove fino a quando trova IDPadri va avanti a farmi sottomenu ...senza dover aggiungere un ciclo al codice come ho fatto io che ...poi non funziona nemmeno
    Confesso che piacerebbe molto anche a me... qualcuno ha qualche idea a riguardo?
    Io ci sto lavorando ma non mi viene nulla di "elegante".
    Sto considerando ovviamente un menu a livelli potenzialmente infiniti.
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  6. #6

    Una probabile soluzione

    http://asp.html.it/articoli/leggi/75...tocategorie/1/
    Questo ho trovato come soluzione, ma prevede la conoscenza a priori del numero di sottocategorie presenti dentro ogni categoria...
    Non esiste una cosa simile senza questo dato?
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.