Newsgroup: it.comp.www.php
Titolo: struttura per tree

Ciao,
Ho una struttura ad albero memorizzata in un DB-mysql con una tabella 
(id,nomenodo,idpadre)
Vorrei esportarla, con PHP, in elenchi HTML (<ul> <li> annidati)
L'idea di base era quella di una sql per ogni nodo... ma non diventa troppo 
pensante?
Avete qualche idea di struttura da creare scorrendo tutta la tabella e 
quindi facendo una select sola?
Pensavo agli array, ma non "vedo" la struttura. L'albero avrà al massimo 3-4 
livelli, ma mi piacerebbe non imporre limiti
Qualche idea o spunto da darmi? Se necessario nella tabella posso aggiungere 
altri campi....
Grazie,
buon lavoro a tutti
-- 
--------------------------------------------------------------------------------
Le informazioni trasmesse sono destinate esclusivamente alla persona o alla 
società in indirizzo e sono da intendersi confidenziali e riservate. Ogni 
trasmissione, inoltro, diffusione o altro uso di queste informazioni a 
persone o società differenti dal destinatario é proibita. Se ricevete questa 
comunicazione per errore, contattate il mittente e cancellate le 
informazioni da ogni computer.
The information transmitted is intended only for the person or entity to 
which it is addressed and may contain confidential and/or privileged 
material. Any review, retransmission, dissemination or other use of, or 
taking of any action in reliance upon this information by persons or 
entities other than the intended recipient is prohibited. If you received 
this in error, please contact the sender and delete the material from any 
computer.
--------------------------------------------------------------------------------

 altri campi....
Ci sono diverse possibilità per gestire via sql una struttura 
gerarchica, ognuna con i pro-contro: struttura statica, a livelli 
determinati, ottimizzata per la ricerca, etc....
Se conosci con certezza la profondità dell'albero, riesci a fare il 
tutto con una sola istruzione sql, altrimenti l'unica soluzione è una 
query per ogni nodo (tramite ricorsione o procedurale).
Guarda questo link, implementa tre diversi modi per la gestione.
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
	Francesco

 pensante?
Ti dico come faccio io. Funziona ottimalmente, e non è "pesante".
Richiede inoltre una sola query sql, e va bene per qualsiasi
profondità, anche non nota a priori.
a) faccio un'unica query al db in cui seleziono tutti i record
   "SELECT nomenodo,nomepadre FROM tabella";
b) per semplicità e una gestione davvero immediata e banale, uso
opportunamente le funzioni del DOM di PHP 5, per ottenere un documento
xml fatto ad esempio cosi:
<mondo>
 <europa>
  <italia>
   <puglia>
    ...
   </puglia>
   ...
  </italia>
  <francia>
   ...
  </francia>
 </europa>
 <america>
 </america>
 ...
</mondo>
c) converto questo xml in un array con una funzione ricorsiva, banale;
d) da questo array, con un'altra funzione altrettanto semplice, posso
ottenere la rappresentazione che più mi piace: e ciò una
rappresentazione tramite <li>, oppure tramite <select>, oppure come
meglio credo.
Il passaggio per il punto b) è stato fatto perché così è risultato
davvero semplice poter svolgere le operazioni successive.
-- 
rob4you
www.outofmind.eu

Grazie ad entrambi
ottima la soluzione di Francesco
quella di rob4you... devi studiarmi le DOM
Grazie ancora

 davvero semplice poter svolgere le operazioni successive.
Onestamente, il passo b mi sembra uno spreco di memoria e tempo.
Sicuramente puoi fare la stessa cosa passando direttamente al c, magari 
con un array di oggetti Nodo, senza lo spreco di una struttura XML e il 
doppio parsing dei dati.
Magari hai gia` le classi "Nodo" pronte (usi quelle del DOM), ma allora 
non ha molto senso poi convertirlo anche in un array, visto che puoi 
vedere il DOM come un array di array di array di ..., e soprattutto non 
ha senso memorizzarlo in XML, ma conviene tenerlo come DOM (a meno che 
non intendessi "pensarlo come XML" e tenerlo solo come DOM).
Bye.

 non intendessi "pensarlo come XML" e tenerlo solo come DOM).
L'unica cosa che uso al passo b) son le funzioni DOM di PHP 5,
precisamente getElementsByTagName, appendChild e createElement.
Me lo tengo così e basta.
Successivamente al passo c) semplicemente uso le proprietà childNodes e
tagName per creare l'array, e il gioco è fatto.
Ovviamente non passo dal "file" xml propriamente inteso, per
riparsarlo....sarei un pazzo! LOL
Il sistema che ho usato, è quello che mi è risultato più semplice per
risolvere problemi di questo tipo.
-- 
rob4you
www.outofmind.eu