2010-10-09 15 views
8

PHP ile hiyerarşik bir liste yapmaya çalışıyorum içeren bir liste ağacı oluşturma ve böyle bir SQLite tablo kurulumu:SQLite'ta

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

listeleri sırasız listeleri ile inşa edilmiş ve olacağını ağaç türü için izin yapısı:

Item1 
    |_Item3 
    |_Item4 
Item2 
    |_Item5 
     |_Item6 

bu dizinleri ve düz diziler ile yapılır gördüm, ama doğru bu yapıyla ve derinlik sınırı olmadan çalışmasını sağlamak için görünmüyor olabilir.

+0

Neler yanlış gidiyor? – Anon

cevap

13

Bir SQL veritabanında hiyerarşik verilerini depolamak için bir ders kitabı tasarımını kullanıyorsunuz. Bu tasarım yani hiyerarşisindeki her düğümün hemen ebeveyn için bir parentid yabancı anahtar vardır, bitişiklik Liste denir. Bu tasarım sayesinde

, size tarif gibi bir ağaç oluşturmak ve ağaç için keyfi derinliğini destekleyemez. Bunu zaten anladın.

Diğer birçok SQL veritabanları (PostgreSQL, Microsoft, Oracle, IBM DB2) bu sorunu çözmek yinelemeli sorgular destekler. Ancak SQLite ve MySQL henüz SQL'in bu özelliğini desteklemiyor.

Yani hiyerarşiyi saklamak için başka bir çözüm gerekiyor. Bunun için birkaç çözüm var. açıklamalar ve örnekler için benim sunum Models for Hierarchical Data with PHP and MySQL bakınız.

Genelde, Kapatma Tablosunu aradığım bir tasarımı tercih ederim, ancak her tasarımın güçlü ve zayıf yönleri vardır. Projeniz için hangisi en iyisi, verilerinizle verimli bir şekilde yapmanız gereken sorgulara bağlıdır. Bu yüzden çözümleri araştırmaya ve kendiniz için bir tane seçmelisiniz.

+0

Bilgi için teşekkürler. Tam olarak ihtiyacım olan şey. – syllabic