![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Chciałbym podyskutować o pewnym rozwiązaniu dotyczącym tworzenia drzewka kategorii. Otóż mam przykladowe drzewo kategorii Komputery(id: 1) -> Monitory(id: 2) -> -> Lcd (id: 3) -> -> -> 24 cale (id: 4) W bazie mam pola ID | PARENT_ID | NAME | PATH_UP | DEPTH Pole PATH_UP trzyma identyfikatory kategorii w górę (odzielone kropką), czyli np kategoria "Lcd" będzie miała w tym polu: "1.2.3" Kiedy będę chciał znaleść wszystkie kategorie na niższym poziomie, tworze zapytanie:
Dla kategorii Monitory:
Pytanie czy LIKE w tym wypadku będzie efektywny i wydajny ? Pole path_up jest typu TEXT i posiada nałozony index. I ogólnie czy takie rozwiązanie jest wydajne i sensowne? EDIT: Jednak na TEXT nie można załozyć indexu wiec zmieniłem typ na VARCHAR(1000) i widze że indeks działa. Jednak dalej mam pytanie czy trakie rozwiazanie drzewa jest dobre według Was? Myślę też by dla identyfikatorów któe podaję po kropce w polu parh_up stworzyć osobną tabelę i tak trzymać polaczenia jeden do wielu (CATEGORIES_ID | CATEGORIES_ID_UP) czyli dla naszej kategorii LCD wynik będzie wyglądał tak: CATEGORIES_ID | CATEGORIES_ID_UP 3 | 1 3 | 2 Kategoria LCD: CATEGORIES_ID | CATEGORIES_ID_UP 4 | 1 4 | 2 4 | 3 Ten post edytował Sajrox 18.12.2009, 14:24:23 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jednak uzyję "Nested Set" aby ograniczyć ilość operacji w momencie dodania/usunięcia kategorii (chodzi o każdorazowe przesuwanie znacznika right) podziele swoje drzewko na kategorie główne oraz jej wszystkie podkategorie.
W przypadku dodania liścia kategorii lub jego usunięcia zmianiam znaczniki right/left tylko dla kategorii gównej na 1 poziomie w której wprowadzamy zmiany. Wszystkie inne kategorie na 1 poziomie nie będą ruszane. W celu wyświetlenia odpowiedniej porcji podkategorii dodam jeszcze pole parent_id. Znajdie się tutaj ID kategorii głównej na 1 poziomie. Screen (IMG:http://img405.imageshack.us/img405/4840/nesteset.jpg) W momencie dodania podkategorii do drzewa od polu parent_id = 1 przesuwam znaczniki tylko d drzewie od parent_id = 1. Wszystkie pozostałe pozostają bez zmian. Co o tym sądzicie ? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 01:10 |