![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 123 Pomógł: 3 Dołączył: 29.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Problem wygląda tak: mam dwie tabele: kategorie oraz przedmiot, wiadomo że w przedmiocie(aukcji) zawierają się klucze o wartości "id_kategoria", jednak tabela przedstawia drzewo kategorii więc produkt jest przypięty do końcówki (kategoria "laptop" zawiera "acer" oaz "samsung" więc Acer inspiron X3 będzie zawierał klucz z "acer" anie z "laptop"), i właśnie tu zaczyna się problem: jak kliknę na link acer to wyświetlę spokojnie acery ale jak kliknę "laptop" to jak mam wyświetlić produkty podkategorii zachowując sortowanie ogólne (np. produkty po czasie rejestracji) - wspomnę iż zagłębienie kategorii jest nieograniczone. Niżej przedstawiam tabelę oraz funkcję rysującą drzewo kategorii. Tabela aukcji:
Tabela kategorie:
Funkcja rysująca drzewo:
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
@sebastian.rozmus: Oczywiście rozwiązanie jest jak najbardziej dobre i ma nawet swoją nazwę - drzewo IP.
@ksenonlogin: Niestety przy takiej budowie systemu kategorii i podkategorii, która opiera się jedynie na id i parentId ciężko będzie znaleźć wydajne rozwiązanie. Musisz bowiem napisać sobie funkcję rekurencyjną, która wyszuka wszystkie podkategorie w danej kategorii i w jej podkategoriach, i tak w kółko. Znalezione id podkategorii wrzucasz do zapytania: SELECT ... FROM `przedmiot` WHERE `klucz_kategoria_przedmiot` IN (tutaj znalezione identyfikatory kategorii) Niestety funkcja rekurencyjna wykonywać będzie masę zapytań SQL, co zdecydowanie wpłynie na spadek wydajności aplikacji i wyszukiwanie podkategorii danej kategorii trochę czasu zajmie (oczywiście to zależy od ilości kategorii i podkategorii). Zdecydowanie lepszym rozwiązaniem będą tutaj zaproponowane wyżej drzewa IP. Oczywiście są jeszcze inne sposoby na zaimplementowanie drzewa kategorii, a wszystkie je łączy wspólny element - zbiory zagłębione (nested sets). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 18:53 |