|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Messaggi: n/a
|
[SQL] alberatura a livelli incogniti
Ciao a tutti, cerco subito di spiegare il problema:
Ho una porzione di DB che in relazione a certi prodotti associa una categorizzazione "FINO" a 3 livelli. Avendo come idea questo schema: Categoria > sotto_categoria > sotto_sotto_categoria Io posso avere un prodotto in uno qualsiasi di questi livelli quindi, a priori, non conosco il livello di "profondità" di un prodotto. La tabella delle categorie è unica dove per tenere traccia della struttura utilizzo la classica situazione: Codice:
categoriaID categoria_parentID Provate subito a guardare l'allegato per avere un'idea chiara. Quando ho 3 livelli, gli stessi si dispongono nella SELECT nella situazione ideale, mentre se sono di meno ho valorizzati a "NULL" i campi sbagliati. Questo molto semplicemente perchè, nel ricostruire l'alberatura, parto dall'ID della categoria associata al prodotto e RISALGO, tuttavia, non conoscendone a priori il livello di "profondità" non so come presentare nella SELECT SQL i dati nel modo corretto. Per chiarirci, il penultimo record recuperato (vedi allegato) dovrebbe avere: Categoria: Cucito Categoria2: Tagliacuci Categoria3: NULL Invece mi ritrovo con: Categoria: NULL Categoria2: Cucito Categoria3: Tagliacuci Potete aiutarmi? Grazie. Ultima modifica di anonimizzato : 12-07-2009 alle 11:29. |
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Se il motore che usi e' Oracle, l'estensione per le query ricorsive ad albero e' gia' presente da parecchi anni.
Se non usi Oracle ma sai a priori che il numero massimo di ascendenti e' fisso, come 3, allora si puo' fare in SQL standard, non troppo elegante ma funzionale Codice:
SELECT ID1.Nome,ID2.Nome,ID3.Nome FROM tabella ID1 LEFT OUTER JOIN tabella ID2 ON (id1.id=id2.parentid) LEFT OUTER JOIN tabella ID3 ON (id2.id=id3.parentid) WHERE ID1.parentid is NULL
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Se devi usare questa query all'interno di qualche linguaggio (mi immagino PHP), ricostruisciti l'albero tramite codice nel linguaggio che usi
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 411
|
edit.
__________________
|
|
|
|
|
|
#5 |
|
Messaggi: n/a
|
Si esatto, uso PHP e avevo già pensato a questa soluzione.
Solo volevo capire se ci fosse un modo più "elegante" per farlo direttamente in SQL. |
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:48.



















