2010-10-09 12 views
8

que estoy tratando de hacer una lista jerárquica con PHP y una configuración de la tabla SQLite como esto:Creación de un árbol con SQLite lista

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

Las listas se construyen con listas desordenadas y permitir de este tipo de árbol estructura:

Item1 
    |_Item3 
    |_Item4 
Item2 
    |_Item5 
     |_Item6 

he visto este hecho con los directorios y las matrices planas, pero me parece que no puede hacer que funcione bien con esta estructura y sin límite de profundidad.

+0

¿Qué está pasando mal? – Anon

Respuesta

13

Está utilizando un diseño de libro de texto para almacenar datos jerárquicos en una base de datos SQL. Este diseño se llama Lista de adyacencia, es decir, cada nodo en la jerarquía tiene una clave externa parentid para su primario inmediato.

Con este diseño, no puede generar un árbol como el que describe y admite una profundidad arbitraria para el árbol. Ya has descubierto esto.

La mayoría de las demás bases de datos SQL (PostgreSQL, Microsoft, Oracle, IBM DB2) admiten consultas recursivas, que resuelven este problema. Pero SQLite y MySQL aún no son compatibles con esta característica de SQL.

Así que necesita otra solución para almacenar la jerarquía. Hay varias soluciones para esto. Vea mi presentación Models for Hierarchical Data with PHP and MySQL para descripciones y ejemplos.

Por lo general, prefiero un diseño que llamo la tabla de cierre, pero cada diseño tiene puntos fuertes y débiles. Cuál es el mejor para su proyecto depende de qué tipo de consultas necesita hacer de manera eficiente con sus datos. Entonces debería estudiar las soluciones y elegir una para usted.

+0

Gracias por la información. Exactamente lo que necesitaba. – syllabic

Cuestiones relacionadas