Forum forum.webPC.pl Strona Główna  
  forum.webPC.pl
FAQ  FAQ   Szukaj  Szukaj   Użytkownicy  Użytkownicy   Grupy  Grupy
 
Rejestracja  ::  Zaloguj Zaloguj się, by sprawdzić wiadomości
 
Forum forum.webPC.pl Strona Główna --> PHP, MySQL oraz inne bazy danych --> [PHP] [CMS] Drzewo kategorii - wydajny sposób

Napisz nowy temat  Odpowiedz do tematu
 [PHP] [CMS] Drzewo kategorii - wydajny sposób Zobacz poprzedni temat :: Zobacz następny temat --> 
Autor Wiadomość
WebCM
PostWysłany: Nie Lip 15, 2007 3:48 pm    Temat postu: [PHP] [CMS] Drzewo kategorii - wydajny sposób Odpowiedz z cytatem

Początkujacy

Dołączył: 15 Paź 2005
Posty: 15

Potrzebuję wydajnego i niezbyt skomplikowanego sposobu na szybkie pobieranie danych o kategoriach - takiego, aby zmiana struktury kategorii nie była skomplikowana.

  1. Pobranie wszystkich kategorii z podkategoriami i pogrupowanie ich
  2. Pobranie tytułu i ID nadkategorii wyświetlanej kategorii (aby goście wiedzieli, gdzie się znajdują i mogli wrócić do wyższych kategorii). Aktualnie wywołuję osobne zapytania (jeżeli w ogóle jest potrzeba).
  3. Pobieranie wszystkich podkategorii danej kategorii. Nie jest bardzo potrzebne, choć użyteczne (więc ostatecznie można pominąć).
  4. Pobieranie podkategorii danej kategorii o 1 poziom niżej.
  5. Wykonywanie operacji na gałęziach drzewa (choćby zmiana wartości pól, w tym "ilość zawartości")
Rozwiązanie powinno być zgodne z MySQL i SQLite (a w szczególności z MySQL). Tym bazom danych brakuje odpowiednich typów tabel bądź funkcji do takich celów. Niektóre czynności (np. sortowanie i grupowanie) ostatecznie może wykonać PHP. Tabela z kategoriami zawiera już 11 pól (a mogą dojść kolejne), więc wolałbym nie dodawać już nowych. Ostatecznie w grę wchodzi nowa tabela.

Aktualne rozwiązanie
Ważne pola w tabeli: ID | nazwa | wyższa kategoria

+ bardzo szybkie wyszukiwanie kategorii niższego poziomu i wyższego o 1 poziom
+ nieskomplikowana struktura (przy zmianach nie trzeba wykonywać innych czynności)

Rozwiązania problemów:

  • Ad 1. Trzeba zastosować skomplikowane pętle, aby pogrupować kategorie (w PHP bądź SQL)
  • Ad 2. Można zastosować pętlę w SQL-u bądź zostawić tak, jak jest (zazwyczaj nie powinno się tworzyć zbyt wielu poziomów).
  • Ad 3. Podobnie jak wyżej.
  • Ad 5. Teraz stosuję pętle w PHP i wykonuję wiele zapytań (dla zmiany ilości zawartości - tylko wtedy, gdy kategoria ma nadkategorie). Jeśli zastosowałbym pętle w SQL-u, trzeba by też dodawać wartości pól do zmiennej.
Przemierzanie drzewa (tree traversal, nested tree)
Ciekawa metoda, jednak prawdopodobnie nie da się pobrać wyższych kategorii przy pomocy 1 prostego zapytania do bazy. Doskonale się jednak sprawdza przy pobieraniu podkategorii.

Powiązania - metoda Depesza
Również ciekawe rozwiązanie - przy małej ilości poziomów rozmiar drugiej tabeli nie powinien urosnąć do kosmicznych rozmiarów. Smile Niestety, więcej problemów jest przy zmianie struktury. Aby zmienić nadkategorię kategorii środkowego poziomu, zmiana powiązań dla child_id=ID to za mało - również należy wykonać tą czynność dla podkategorii (ale można je pobrać za 1 zapytaniem i z PHP złożyć kwerendę modyfikującą).

  • Ad 1. Być może efekt można osiągnąć przez posortowanie kategorii wg: parent_id, depth, jednak mogę się mylić. Czy ktoś jest dobrze zaznajomiony z metodą powiązań i mógłby powiedzieć coś na ten temat?
  • Ad 2,3,4,5. Raczej nie będzie problemu - lecz czy na pewno?
Indeksy w stylu adresu IP
Jeżeli kategoria ma subkategorię o ID 8, jej indeks to: 008.001 (ostatni człon to numer kolejności) bądź 008.

+ bezproblemowe i szybkie sortowanie i grupowanie kategorii

Pobieranie podkategorii i nadkategorii jest możliwe, lecz wymaga użycia operatora LIKE lub specjalnej funkcji, więc prawdopodobnie nie jest tak szybkie. Podobnie wykonywanie operacji (ad. 5.) opera się na tej samej zasadzie. Zmiana struktury może być kłopotliwa (ale nie musi) - trzeba pozamieniać podkategoriom indeksy.

Które z tych rozwiązań najlepiej nadaje się do podanych wyżej celów i nie jest uciążliwe przy modyfikacji struktury? :gitara: Wymieńmy się doświadczeniami.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
b4m
PostWysłany: Pon Sty 05, 2009 7:24 am    Temat postu: sprawdź to Odpowiedz z cytatem

Nowy

Dołączył: 05 Sty 2009
Posty: 1

Tutaj masz wpis odnośnie tworzenia drzewiastej struktury kategorii: http://blog-programisty.pl/2009/01/drzewo-kategorii-funkcja-rekurencyjna/
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy temat  Odpowiedz do tematu Strona 1 z 1

Forum forum.webPC.pl Strona Główna --> PHP, MySQL oraz inne bazy danych --> [PHP] [CMS] Drzewo kategorii - wydajny sposób
Skocz do:  



Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
 
 


gabloty krajowe, wiaty kroll, aquai
Powered by phpBB Š 2001, 2002 phpBB Group