Aktualnie korzystam z nested sets + parent_id
Jaki problem?
Mając następującą strukturę:
- Kategoria 1 - Sub 1.1 - SubSub 1.1.1 - SubSub 1.1.2 - SubSubSub 1.1.2.1 - SubSubSub 1.1.2.2 - SubSubSub 1.1.2.3 - Sub 1.2 - SubSub 1.2.1 - SubSub 1.2.2 - Sub 1.3 - Kategoria 2 - Sub 2.1 - SubSub 2.1.1 - SubSub 2.1.2 - Sub 2.2 - Sub 2.3 - Kategoria 3 - Sub 3.1 - Sub 3.2 - Sub 3.3 - Kategoria 4 - Kategoria 5
będąc w kategorii Sub 1.2 powinienen widzieć:
- Kategoria 1 - Sub 1.1 - Sub 1.2 - SubSub 1.2.1 - SubSub 1.2.2 - Sub 1.3 - Kategoria 2 - Kategoria 3 - Kategoria 4 - Kategoria 5
a będąc w kategorii SubSubSub 1.1.2.2
- Kategoria 1 - Sub 1.1 - SubSub 1.1.1 - SubSub 1.1.2 - SubSubSub 1.1.2.1 - SubSubSub 1.1.2.2 - SubSubSub 1.1.2.3 - Sub 1.2 - Sub 1.3 - Kategoria 2 - Kategoria 3 - Kategoria 4 - Kategoria 5
Próby skończyły się na następującym zapytaniu:
SELECT * FROM categories WHERE parent_id IN(NULL, 1) OR lft BETWEEN 3 AND 7)
Przy takim zapytaniu muszę znać:
1. ID głównej gałęzi w nested sets (null lub id = 1, w zależności od struktury nested sets)
2. ID najwyższego rodzica otwartej kategorii (w moim zapytaniu id=1)
3. LFT i RGT najwyższego rodzica kategorii.
Dla struktury
- Kategoria 1 - Sub 1.1 - SubSub 1.1.1 - SubSubSub 1.1.1.1 - SubSubSub 1.1.1.2 - SubSubSub 1.1.1.3 - SubSub 1.1.2 - SubSubSub 1.1.2.1 - SubSubSub 1.1.2.2 - SubSubSub 1.1.2.3 - Sub 1.2 - SubSub 1.2.1 - SubSub 1.2.2 - Sub 1.3 - Kategoria 2 - Sub 2.1 - SubSub 2.1.1 - SubSub 2.1.2 - Sub 2.2 - Sub 2.3 - Kategoria 3 - Sub 3.1 - Sub 3.2 - Sub 3.3 - Kategoria 4 - Kategoria 5
bedąc w SubSubSub 1.1.2.1 powinienen otrzymać
- Kategoria 1 - Sub 1.1 - SubSub 1.1.1 - SubSub 1.1.2 - SubSubSub 1.1.2.1 - SubSubSub 1.1.2.2 - SubSubSub 1.1.2.3 - Kategoria 2 - Kategoria 3 - Kategoria 4 - Kategoria 5
SELECT * FROM categories WHERE parent_id IN (NULL, 1, 2) OR lft BETWEEN 7 AND 10
czyli muszę znać:
1. ID każdego rodzica
2. LFT i RGT najniższego rodzica
i to już mnie przerasta... Może znacie jakiś sprytny sposób na to?