2010-10-09 10 views
8

Sto cercando di fare una lista gerarchica con PHP e una configurazione tabella SQLite in questo modo:Creazione di un albero lista con SQLite

| itemid | parentid | name | 
    ----------------------------------------- 
    | 1  | null  | Item1 | 
    | 2  | null  | Item2 | 
    | 3  | 1   | Item3 | 
    | 4  | 1   | Item4 | 
    | 5  | 2   | Item5 | 
    | 6  | 5   | Item6 | 

Le liste sarebbero stati costruiti con liste non ordinate e far sì che tale tipo di albero struttura:

Item1 
    |_Item3 
    |_Item4 
Item2 
    |_Item5 
     |_Item6 

ho visto questo fatto con le directory e array piatte, ma io non riesco a farlo funzionare a destra con questa struttura e senza un limite di profondità.

+0

cosa sta andando male? – Anon

risposta

13

Si sta utilizzando un progetto da manuale per la memorizzazione di dati gerarchici in un database SQL. Questo design è chiamato Adjacency List, ovvero ogni nodo nella gerarchia ha una chiave esterna parentid nella parent esterna.

Con questo modello, non è possibile generare un albero come descritto e supportare la profondità arbitraria dell'albero. L'hai già capito.

La maggior parte degli altri database SQL (PostgreSQL, Microsoft, Oracle, IBM DB2) supporta query ricorsive che risolvono questo problema. Ma SQLite e MySQL non supportano ancora questa funzionalità di SQL.

Quindi è necessaria un'altra soluzione per memorizzare la gerarchia. Ci sono diverse soluzioni per questo. Vedi la mia presentazione Models for Hierarchical Data with PHP and MySQL per descrizioni ed esempi.

Di solito preferisco un disegno che chiamo Tavolo di chiusura, ma ogni disegno ha punti di forza e punti deboli. Qual è la soluzione migliore per il tuo progetto dipende dal tipo di query che devi eseguire in modo efficiente con i tuoi dati. Quindi dovresti studiare le soluzioni e sceglierne una per te.

+0

Grazie per l'informazione. Esattamente quello di cui avevo bisogno. – syllabic

Problemi correlati