Struttura ad albero

Ciao a tutti!

Sono un nuovo utente del forum (comunque ne sono rimasto subito affascinato) e sono anche alle prime programmazioni in php.

Ho un database in PostgreSQL. Al suo interno, ho una tabella costruita per contenere i dati relativi ad una ipotetica struttura ad albero, caratterizzata dai seguenti campi:

- id_nodo: di tipo int4, indica id del nodo di un albero;

- id_padre: di tipo int4, indica id del padre di un determinato nodo dell'albero;

- nome_nodo: di tipo varchar, indica il nome del nodo di un albero;

Dovrei realizzare, in php, due funzioni:

1) Una funzione in grado di stamparmi a video una sorta di struttura ad albero, con le varie voci a diversi livelli rispetto ai relativi padri

Es.:

       Nodo1

            Nodo 2

               Nodo 3

            Nodo 4

2) Una funzione in grado di cancellare la struttura ad albero. Se nodo che voglio cancellare è padre di altri nodi, la funzione deve essere in grado di cancellare in successione anche tutti i figli e così via....

Spero che qualcuno possa darmi dei consigli.

Grazie a tutti

inviato 10 anni fa
js80
js80
1
X 0 X

Il 2° problema dovresti risolverlo mettendo al campo "id_padre" una constraint del tipo "ON DELETE CASCADE". Naturalmente perchè possa funzionare, "id_padre" deve referenziare "id_nodo" 

A questo punto, a livello software, qualisasi DELETE che farai, sarà permessa... O0

Per il 1° non saprei aiutarti, visto che anche io mi sono bloccato sullo stesso tipo di problema.

risposto 10 anni fa
AndyB
X 0 X

Il problema della gestione di strutture gerarchiche in un database relazionale è stato ampiamente risolto e ci sono diversi approcci ormai standardizzati. Ti segnalo dei link che trattano l'argomento:

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

si riferisce a MySQL ma non avrai problemi ad adattarlo a postgresql

http://www.sitepoint.com/article/hierarchical-data-database

un tutorial ben fatto sull'argomento, con degli esempi in PHP

http://freephp.html.it/articoli/view_articolo.asp?id=164

in italiano!

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grazie a tutti!!!!!!!

Con i vostri suggerimenti son riuscito a risolvere i problemi che vi avevo elencato.

Ciao

risposto 10 anni fa
js80
js80
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda