Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    trovare tutte le sottocategorie

    ciao a tutti ho un piccolo problema.
    ho una tabella con:

    id descr id_sito id_padre

    in questa tabella le categorie padri sono uguali a 0 mentre le varie sotto categorie corrispondono all'id padre relativo. Non ci sono limiti nelle sottocategorie. Il mio problema è che se cancello un categoria qualsiasi devo poter cancellare anche tutte le sotto categorie relative. Esiste una funzione che mi permette di vedere tutte le sotto categorie senza mandare in loop il programma?

    Grazie per l'aiuto

  2. #2
    se il numero di livelli che puoi creare non ha limiti devi usare una funzione ricorsiva, non puoi farlo direttamente. in caso contrario la soluzione è semplice.
    la tua situazione è solo:

    padre
    -->figlio1
    -->figlio2
    -->figlio3

    oppure può essere anche:

    padre
    -->figlio1
    ---->sottofiglio1
    ---->sottofiglio2
    -->figlio2
    ---->sottofiglio2
    ------>sotto-sottofiglio2
    xxx

  3. #3
    Utente di HTML.it L'avatar di Robycz
    Registrato dal
    Jul 2002
    Messaggi
    245
    Non sono sicuro di aver capito,
    presumo che tu abbia una tabella con le categorie ed una con le sottocategorie..

    codice:
    DELETE FROM tabSottoCategorie
    WHERE idCategoria = 'categoria cancellata';

  4. #4
    no è tutta nella stessa tabella e possono essere infinite

  5. #5
    devi per forza fare un loop, per cancellare tutte quelle il cui padre non esiste, fino ad esaurimento

  6. #6
    come si fa con la funzione ricorsiva?

  7. #7
    questa la logica

    codice:
    DO
    
       conta quante sottocategorie hanno il padre inestistente
       sono zero? esci dal DO
    
       cancella tutte le sottocategorie che hanno il padre inestistente
    
    LOOP
    adattalo alla tua situazione

  8. #8
    mi puoi fare un esempio più pratico per favore?

  9. #9
    se mettevi una chiave primaria nella tabella in questo modo:

    codice:
    id
    id-padre PK - delete on cascade, update on cascade
    nome_categoria
    e per le categorie padri sorgenti mettevi id_padre=id, una volta cancellata una categoria padre automaticamente il db cancella anche tutti i figli e i figli dei figli e i figli dei figli dei figli etc

  10. #10
    Utente di HTML.it L'avatar di Robycz
    Registrato dal
    Jul 2002
    Messaggi
    245
    già..



    Cmq, per tornare al buon robbe2000,
    non dobbiamo dimenticarci che stiamo parlando di database e non di alberi.
    O, per meglio dire, in quella tabella è rappresentanto un albero, ma sempre di tabella si tratta.
    Quindi credo che sia meglio trovare una soluzione che usi le query come base,
    piuttosto che visitare e tagliare un ramo da un albero che è solo virtuale.
    Le funzioni ricorsive hanno alcuni difettucci da non sottovalutare, io le lascerei stare.
    Beninteso, è solo un parere.. se la tabella sarà sempre piccolina non ci sono problemi..
    se poi si tratta di un problema che vive (e generalmente muore) nel mondo della scuola la ricorsione va benissimo..
    se invece iniziamo a parlare di tabelle di un 10.000 record direi che la ricorsione è meglio lasciarla in pace.
    Spero siate d'accordo con me

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.