[PHP][MySQL] Jak utworzyć drzewo katalogów?
Ostatnio zmodyfikowano 2011-04-29 15:55
absflg Temat założony przez niniejszego użytkownika |
[PHP][MySQL] Jak utworzyć drzewo katalogów? » 2011-04-28 23:03:39 Piszę zbiór artykułów do strony w PHP. Zgodnie z założeniem artykuły są poukładane w działy, te znów w poddziały itd. W teorii głębokość(nie wiem jak to nazwać...) katalogów może być nieograniczona. Mam 2 tabele w bazie: do artykułów i do działów. Artykuły poza całą swoją treścią, mają numer ID oraz informacje o dziale, w którym się znajdują (jego ID). Działy posiadają swoje ID i ew. numer działu nadrzędnego.
Przychodzą mi na myśl 3 rozwiązania, ale żadne z nich mnie nie zadowala: => Artykuł musi się znajdować w poddziale działu głównego - tak więc porzucenie możliwości dowolnego rozplanowania. Zrobić z działów i poddziałów osobne tabele. (jedno zapytanie) => Przechowywać w działach informacje o WSZYSTKICH działach nadrzędnych - nie odpowiada mi, gdyż dziełu takiego nie będę mógł łatwo przenieść. (dwa zapytania o ile się nie mylę, bo musi być zapisane jako ciąg do przetworzenia przez PHP) => Zapytania w pętli PHP. Po uzyskaniu działu, bombardować bazę pojedynczymi zapytaniami o coraz bardziej zewnętrzne działy. |
|
DejaVu |
» 2011-04-28 23:38:48 To zrób procedury składowane, które modyfikują kilka tablic za jednym wywołaniem i przenoszenie stanie się proste :) |
|
kamillo121 |
» 2011-04-29 13:01:21 Takie drzewko katalogów można łatwo wygenerować np:
dział: id | nazwa_działu | id_ocja | id_dziecka
Teraz pobierasz wszystkie działy z bazy poukładane według id_ojca rosnąco i tworzysz drzewko w php np wartość -1 id_ocja oznacza katalog główny resztę przyporządkowujesz według id i masz drzewko. Potem tylko pobrać nazwy wszystkich artykułów wraz z id kategorii i dodajesz elementy w odpowiednie gałęzie (wtedy można zaawansowane drzewka tworzyć, np w podkategorii może być kilka następnym podkategorii i artykuł itd. Takie drzewo potem wrzucasz do cache i nie marnujesz za każdym razem mocy na generowanie samego drzewka.
Przy takim rozwiązaniu: -edytujesz tylko id_kategorii artykułu w celu zmiany działu a nie całe drzewka... -możesz zmieniać mniejsze drzewka kategorii i podczepiać pod inne gałęzie |
|
DejaVu |
» 2011-04-29 15:24:45 Tyle, że ścieżki nie wyciągniesz jednym zapytaniem :) |
|
kamillo121 |
» 2011-04-29 15:48:33 ee jakiej ścieżki ?:D |
|
DejaVu |
» 2011-04-29 15:51:27 nazw działów nadrzędnych. Czytaj: jesteś w dokumentacji na funkcji X i chcesz mieć ścieżkę do wszystkich działów nadrzędnych, a nie tylko do pierwszego rodzica (ścieżka => nawigacja). |
|
kamillo121 |
» 2011-04-29 15:55:42 To akurat zależy od potrzeb bo jeżeli przyjmiemy, że ścieżka może się składać z maks 5 "katalogów" to może w tym pomóc link ( href="doc/c++/sdl/grafika/blit_surface"). Jeżeli jednak będzie dłuższa ścieżka to nasze drzewo, które zostało wygenerowane wyżej podanym sposobem zawiera przecież wszystkie gałęzie wystarczy odczytać gałąź prowadzącą do danego artykułu i mamy całą ścieżkę bez użycia mysql'a(oczywiście gdy drzewko jest w cache).
//tylko trzeba byłoby obmyślić sensowny zapis drzewka, żeby za dużo pamięci nie zużyć |
|
« 1 » |