Zaprezentuję na przykładzie jak to wygląda.
Powiedzmy że mam w bazie 4 rekordy przy czym każdy następny jest podkategorią poprzedniego.
id name parent
1 Cat1 0
2 Cat2 1
3 Cat3 2
4 Cat4 3
Pobieram je zapytaniem
( zapytanie jest bardziej skomplikowane,
bo w rzeczywistości pobieram dane z 5 tabel na raz
, to jest uproszczony model ):
SELECT project.*, category1.* category2.cat_id AS cat_id2, category2.cat_name AS cat_name2, category2.cat_parent_id AS cat_parent_id2 FROM project LEFT JOIN category AS category1 ON (category1.project_id = project.p_id AND category1.cat_parent_id = 0) LEFT JOIN category AS category2 ON category1.cat_id = category2.cat_parent_id
Wyświetla to coś takiego:
Kod
p_name c_id c_name c_parent c_id2 c_name2 c_parent2
Projekt 1 Cat1 0 2 Cat2 1
Projekt 1 Cat1 0 2 Cat2 1
Czyli nie wyświetla podkategorii-podkategorii ok kiedy usunę AND category1.cat_parent_id = 0
to wynik jest taki:
Kod
p_name c_id c_name c_parent c_id2 c_name2 c_parent2
Projekt 1 Cat1 0 2 Cat2 1
Projekt 1 Cat2 0 2 Cat3 2
Projekt 1 Cat3 0 2 Cat4 3
Projekt 1 Cat2 0 NULL NULL NULL
Projekt 1 Cat3 0 NULL NULL NULL
Projekt 1 Cat4 0 NULL NULL NULL
Projekt 1 Cat1 0 2 Cat2 1
Projekt 1 Cat2 0 2 Cat3 2
Projekt 1 Cat3 0 2 Cat4 3
Projekt 1 Cat2 0 NULL NULL NULL
Projekt 1 Cat3 0 NULL NULL NULL
Projekt 1 Cat4 0 NULL NULL NULL
Czyli zupełnie nie potrzebnie wyświetla mi 3 ostatnie rekordy.
Co przy dużej liczbie kategorii znacząco opóźni wykonanie.
Co ja mam na to poradzić ? :|
edit > mwojcik:
Nie wiem jak mam ci to jeszcze prościej wytłumaczyć.
Jak zaznaczyłem wcześniej zapytanie pobiera dane Z PIĘCIU TABEL i muszę jakoś je uprościć.
Zrobiłem to nie tyle wystarczająco ile prościej się nie da.