Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Poruszanie się po drzewku
Forum PHP.pl > Forum > Przedszkole
Gabrielx
Witam posiadam takie oto drzewko. Kazda z galezi ma swoje pola: parent, id i złóżmy matrix
----------------------- 1
---------------------- /--\
-------------------- 2-----3
------------------- /-\
------------------ 4--5
----------------- /|\
---------------- 6-7-8

Chciałbym teraz się poruszyć po tym drzewku, zaczynając od pozycji nr 1, do 8 w celu podmienienia matrix - wszystkie pola które napotka żeby były nadpisane (np. zaczynamy od 1, to przechodzi do 2 i tworzy 1/2, potem z 2 do 4 to 1/2/4).
Np. Jeśli zaczynamy od pozycji 2 to żeby nadpisało tylko 4,5,6,7,8 bez 1,3.
Mam na myśli głównie skrypt który by pobierał z DB parent i schodził niżej. Nie byłoby problemu z tym gdyby drzewko nie miało rozgałęzień.

Nie jest to nested set. Jest to moja implementacja bazująca na tym:
http://4programmers.net/SQL/Zaawansowane_drzewa_w_MySQLid
KotWButach
To nieco przypomina drzewo BST ale to twoje jest powolne... Tak sądzę ale mogę się mylić ponieważ dopiero wgłębiam się w ten temat. Co do drzew BST na necie mozna znaleźć gotowe klasy.
Gabrielx
O widzisz, bo czy powolne czy nie to mnie nie obchodzi zbytnio w tym momencie, ważne aby działało - implementuje to do Zend Framework, i później po każdym dodanym rekordzie jest generowany plik .ini z DB z własnościami menuj.

Też się w ten temat dopiero zagłębiam, przez dłuższy czas zastanawiałem się nad Nested Set, lecz jak przejżałem to uznałem że jest nieco skomplikowane.

Ogólnie wymyśliłem pewne rozwiązanie, ocencie czy dobrze myślę:

Załózmy jesteśmy w id=4 i aby się po nim poruszać to po prostu, dodajemy kolumne count_children która liczy rodziców, po czym szukamy id = 4 w parent. Wyświetlą się nam 3 wyniki (tak jak w count children) 6,7,8, dajemy to do tablicy jako nowe rekordy, i później jeśli te id mają kolejne dzieci, to w dalszym stopniu dodajemy wiersze w tablicy. Później po dodaniu wszystkich elementów w tablicy następuje nadpisywanie wszystkiego.
KotWButach
nie wymyślaj już wymyślonego.

To jak tak to może kopiec binarny? gdzie każda kolejna linia to kolejno
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
16[...]

1
2
2 do 2
2 do 3
2 do 4

a wiec
masz left.child[]
oraz right.sibling[]

a co do twojej wypowiedzi " bo czy powolne czy nie to mnie nie obchodzi zbytnio " jest to raczej brak wiedzy w zakresie informatyki, algorytmiki lub ignorancja dotycząca tego zagadnienia. Drzewa binarne powstały po to by zaoszczędzić pracy procesorowi nic poza jak nei zależy ci na wydajności po prostu daj kolejkę listę cokolwiek prostszego i po kłopocie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.