2010-10-09 24 views
8

Próbuję zrobić hierarchiczną listę z PHP i konfiguracja tabeli SQLite tak:Tworzenie listy drzewo z SQLite

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

Wykazy będą zbudowane z list nieuporządkowanych i pozwalają na tego typu drzewa struktura:

Item1 
    |_Item3 
    |_Item4 
Item2 
    |_Item5 
     |_Item6 

widziałem to zrobić z katalogów i płaskich tablic, ale nie wydaje się, aby to działało w porządku z tą strukturą i bez limitu głębokości.

+0

co się dzieje? – Anon

Odpowiedz

13

Używasz podręcznika do przechowywania danych hierarchicznych w bazie danych SQL. Ten projekt jest nazywany Listą Przyległości, tj. Każdy węzeł w hierarchii ma klucz obcy parentid dla jego bezpośredniego rodzica.

Za pomocą tego projektu nie można wygenerować drzewa takiego, jak opisujesz i obsługuje dowolną głębokość drzewa. Już to rozgryzłeś.

Większość innych baz danych SQL (PostgreSQL, Microsoft, Oracle, IBM DB2) obsługuje kwerendy rekurencyjne, które rozwiązują ten problem. Ale SQLite i MySQL nie obsługują jeszcze tej funkcji SQL.

Potrzebujesz innego rozwiązania do przechowywania hierarchii. Istnieje kilka rozwiązań w tym zakresie. Zobacz moją prezentację Models for Hierarchical Data with PHP and MySQL w celu uzyskania opisów i przykładów.

Zazwyczaj wolę projekt, który nazywam tabelą zamknięcia, ale każdy wzór ma siłę i słabe strony. Która z nich jest najlepsza dla twojego projektu, zależy od tego, jakiego rodzaju zapytania potrzebujesz do efektywnego przetwarzania danych. Więc powinieneś przestudiować rozwiązania i wybrać je dla siebie.

+0

Dziękuję za informacje. Dokładnie to, czego potrzebowałem. – syllabic