Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Drzewiasta struktura oraz INDEX na pole typu TEXT
Sajrox
post
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:
  1. SELECT * FROM categories WHERE path_up LIKE '1.2.3.%'


Dla kategorii Monitory:
  1. SELECT * FROM categories WHERE path_up LIKE '1.2.%'


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sajrox
post
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 ?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 01:10