Newsgroup: it.comp.www.php
Titolo: Nested Set

Ciao.
Sto cercando di capire la gestione delle gerarchie tramite nested set.
Se ho capito bene, la rappresentazione di un db nested set č come quello
riportato nella seguente immagine:
http://www.xilab.net/nestedset.jpg
Ho trovato delle funzioni per inserire ed eliminare i nodi e per
visualizzare il percorso dalla radice ad un nodo.
Ad esempio, per visualizzare il percorso dalla radice ad un nodo uso
la seguente query:
SELECT A.nome AS A FROM personale AS A, personale AS B
WHERE A.sx <= B.sx AND A.dx >= B.dx AND B.id={$id}
ORDER BY sx ASC";
Quello che non sono riuscito a fare č riuscire a visualizzare determinati
nodi.
Ad esempio, se io volessi elencare le categorie principali,
quindi (riferendomi alla figura): Cibo, Bevande
Oppure se volessi elencare solo le sottocategorie: Carne, Pesce
o anche: Carne, Pesce, Alcolici, Analcolici
Che tipo di query devo utilizzare?
Un'altra cosa che non ho capito:
devo avere per forza un'unica radice principale (nel caso della figura
Categorie),
o posso far partire il db con due o piů radici, quindi direttamente da Cibo,
Bevande?
Grazie.

 da Cibo, Bevande?
Per implementare questo devi usare un altro campo che discrimina a
quale albero ti riferisci (vedi $FieldDiffer della classe di cui sopra).
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? Votami! 
http://www.phpclasses.org/vote.html
Do. Or do not. There is not try.

 campo come discriminante.
ok... ho inserito il campo livello.
Mi aiuteresti a realizzare un menů a tendina in cui visualizzare le
diverse categorie nel modo seguente?
Cibo
-- Carne
-- Pesce
---- Tonno
---- Salmone
Bevande
-- Alcolici
---- Vino
-------- Bianco
-------- Rosso
-- Analcolici
Grazie.

 diverse categorie nel modo seguente?
Che cosa non riesci a fare?
-- 
I am what I am, I do what I can


 Che cosa non riesci a fare?
Mi sono perso nello script per il menů a tendina.
Allora:
mi trovo il numero dei livelli presenti, poi con un ciclo for faccio fare
delle query per ottenere i livelli e i vari sottolivelli.
Ma naturalmente non mi funziona perchč sicuramente č una soluzione errata e
del cavolo.

 i vari sottolivelli.
Stai usando i nasted sets? Se la risposta e' si e' sufficiente una
singola query per estrarre tutto l'albero.


 singola query per estrarre tutto l'albero.
Allora:
con le seguenti query riesco ad estrarmi il percorso dalla radice al nodo
 $sql = "SELECT sx, dx FROM tabella WHERE id={$id}";
 $res = mysql_query($sql);
 $line = mysql_fetch_assoc($res);
 // Recupero il percorso
 $sql = "SELECT nome FROM tabella WHERE sx <= {$line['sx']} AND dx >=
{$line['dx']} ORDER BY sx ASC";
 $res = mysql_query($sql);
 while ($line = mysql_fetch_assoc($res)) {
  echo  $line['nome']."<br />";
}
ma per ottenere tutto l'albero e fare in modo che i livelli vengano
stampati a video con i rispettivi sottolivelli ( e non prima i nodi del
livello 1, poi del 2, ecc)
come si fa?
Mi mostreresti quest'unica query?

 del livello 1, poi del 2, ecc)
$sql = "SELECT nome FROM tabella WHERE sx >= 1 AND dx <= 24 ORDER BY
sx";
Dove 1 e 24 sono rispettamente l'sx ed il dx del nodo radice di cui si
desidera estrarre l'albero. Utilizzando un limite di livellie'
possibile estrarre solo una parte dell'albero in ampiezza od in
profondita'.
