 
View Full Version : [Sql] struttura ad albero
Sto cercando di fare questa cosa,devo creare una struttura che ha come profondità al massimo 3,dove ognuna deve tenere riferimento al padre
es 
id     padre    nome
1       0          root
2       1          mp3
3        1         foto
4        3         mare
però avendo profondità 3 come faccio a far "stampare" alla query
es 
root/foto/mare
come si può sostituire a ID padre il nome corrispondente?
Grazie in anticipo
In teoria potresti fare un right outer join tre volte con la stessa tabella.
http://it.wikipedia.org/wiki/Join_(SQL)#Right_outer_joins
Così ti basta risalire dall'ultimo campo fino a quando trovi un NULL per ricostruire tutto il percorso.
intanto grazie mille cionci,sei stato veramente gentile
select c1.nome as Nome1,c2.nome as Nome2,c3.nome as Nome3
from cartelle c1 RIGHT OUTER JOIN cartelle c2
on c1.id=c2.padreid 
RIGHT OUTER JOIN cartelle c3
on c2.id=c3.padreid 
il terzo join che mi consigliavi non mi permette di farlo,perchè non lo prende
Dimentico qualcosa?
Inoltre le cartelle che hanno solo profondità 1, lasciano inevitabilmente vuoto il primo campo
C' è la possibilità di evitare?
Ultima cosa,c' è la possibilità di mettere nel codice immediatamente al fondo del nome della directory "/" senza doverlo fare manualmente
es. 
scrivendo mp3 da solo diventi mp3/
Grazie ancora in anticipo
Strano, ti dovrebbe permettere di fare anche il terzo JOIN. Quale DBMS usi ?
Riguardo al campo vuoto è voluto...non tutte le categorie hanno la stessa profondità.
Sicuramente puoi anche ottenere il percorso completo separato da "/". Devi manipolare un po' di stringhe e controllare i campi NULL con qualche condizione. Però sono tutte cose che dipendono dal DBMS usato. 
Basterebbe usare quella query (con i 3 JOIN però) come relazione dalla quale vai a riprendere i dati in FROM e poi lavorare sulle stirnghe.
postgresql,i primi due sono corretti?Come metto il terzo?
Come faccio a manipolare le stringhe?
Grazie ancora!
Non conosco il dialetto di postegresql, mi spiace.
Mi stampi il risultato di quella query ?
es root/mp3/canzoni inserendo come padre di canzoni mp3 e come padre mp3 root
Mi fai vedere il risultato riempiendo la tabella con qualche elemento ? Mi sa che ne bastano due di join.
ad esempio 
root mp3 
root foto mare
root foto montagna
Ma questo è il risultato della query ??? Dovrebbe farti vedere anche i campi NULL e i campi id.
select c1.nome as Nome1,c2.nome as Nome2,c3.nome as Nome3
come nome campi (Nome1,Nome2,Nome3)
e sotto i valori ad esempio come ti ho scritto
e ad esempio se root disegni
fa 
null   root   disegni
Metti un numero di dati maggiore nella tabella. Almeno come nell'esempio del primo post.
Non mi puoi incollare tutto l'output ?
Comunque ti basta conoscere gli operatori condizionali (devi testare se è NULL un campo) e fra stringhe per concatenare i risultati.
mi puoi scrivere in codice questi 2 passaggi?
mi puoi scrivere in codice questi 2 passaggi?
Come ti ho detto non conosco il dialetto. Piuttosto che impararmelo io non sarebbe meglio che te lo imparassi tu ?
http://www.postgresql.org/docs/8.4/interactive/functions-conditional.html
http://www.postgresql.org/docs/8.4/interactive/functions-string.html
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.