Visualizzazione dei risultati da 1 a 6 su 6

Discussione: funzione ricorsiva ?

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    654

    funzione ricorsiva ?

    Salve a tutti

    ho delle categorie organizzate in un db mssql in questa maniera:

    padre
    -->figlio1
    ---->sottofiglio1
    ---->sottofiglio2
    -->figlio2
    ---->sottofiglio3
    ---->sottofiglio4
    ------>sotto-sottofiglio3
    -------->sotto-sotto-sottofiglio3

    ecc....

    si tratta di n categorie, i campi della tblcategoria sono / id / nomeCat/ idGenitore /. Vorrei recuperare tutte le sottocategorie per una categoria, ma ho qualche problemino.
    Faccio un esempio: per figlio2 dovrei poter recuperare :

    ---->sottofiglio3
    ---->sottofiglio4
    ------>sotto-sottofiglio3
    -------->sotto-sotto-sottofiglio3

    non solamente:

    ---->sottofiglio3
    ---->sottofiglio4

    da quello che sono riuscita a capire molti consigliano una funzione ricorsiva. ho provato, facendo una funzione che partendo dall'ID di figlio2 seleziona i recordset con IDgenitore = ID di figlio 2 e poi all'interno del ciclo ho richiamato la stessa funzione, ma come dicevo non va, sapete darmi consigli ?

  2. #2
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    La funzione ricorsiva è sicuramente una soluzione.

    La funzione dovrebbe fare questo:

    passi come parametro l'id categoria

    seleziona i dati della categoria passata e li visualizza

    seleziona tutti i figli

    se i figli esistono fa un ciclo in cui richiama se stessa passando l'id categoria figlio.


    Per esempio:

    codice:
    function mostracategorie (idcat)
    dim strq, rscat, rsfigli
    
      strq="select * from categorie where idcategoria = " & idcat
      set rscat=conn.execute(strq)
      if not rscat.eof then
        response.write rscat("nomecategoria") & "
    "
        strq="select * from categorie where idgenitore = " & idcat
        set rsfigli=conn.execute(strq)
        while not rsfigli.eof
          mostracategorie(rsfigli("idcategoria"))
          rsfigli.movenext
        wend
      end if
    end function
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    654
    Ciao

    avevo fatto questa


    function ricorsione(catID, sSql, Rs, livello, TopID)

    sSql = "Select * from cat WHERE idGen = "&catID
    'response.write sSql
    set Rs = cn.Execute(sSql)

    if not Rs.eof then

    Do while not Rs.eof

    response.write "
    "&Rs("cat")&" - "&livello&"
    "
    nuovaCatID = Rs("id")
    call ricorsione(nuovaCatID, "sSql", "Rs", livello, "")

    Rs.movenext

    loop
    end if
    ricorsione = str
    end function



    la richiamo così:


    <%
    cn.open

    response.write ricorsione(request.QueryString("id"),"sSql","rs",0 ,request.QueryString("id"))

    cn.close
    %>

    Mi aiuti a correggerla ?
    Funziona ma non è completa

    per ottenere l'alberatura indentando le varie voci vorrei sfruttare livello e TopID
    TopID è l'id della categoria dalla quale estraggo il primo id per poi fare la select

    in + non capisco una cosa: nonostante il risultato sia quello desiderato l'uso delle 2 variabili sSql e rs mi sembrava inutile, ma se non passo + questi valori lo script si interrompe al secondo risultato, io li avevo usati perchè temevo di dover dare nomi diversi ai vari oggetti recordset che la ricorsione avrebbe aperto e anche alla stringa sSql.

    insomma forse ho avuto un pò di fortuna e ho ottenuto il risultato che desideravo, ma non mi è tutto chiaro. Mi servirebbe una mano per fare chiarezza

  4. #4
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Hai provato quella che ti ho postato io?
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    654
    si ho provato ,non funziona, mentre con l'altra sono andata avanti, e sembra vada bene è proprio tanto brutta ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    654
    ritiro tutto quello che ho detto funziona

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 © 2026 vBulletin Solutions, Inc. All rights reserved.