Wszystkich przodków dla danej kategorii 9999 pobieram tak:
SELECT T2.category_id ,T2.category_name FROM ( SELECT @r AS _id, (SELECT @r := parent FROM categories WHERE category_id = _id) AS parent, @l := @l + 1 AS lvl FROM (SELECT @r := 9999, @l := 0) vars, categories m WHERE @r <> 0) T1 JOIN categories T2 ON T1._id = T2.category_id ORDER BY T1.lvl DESC
Nie mam pojęcia jak jednak pobrać wszystkich potomków. Da się w ogóle, w podobny sposób?
Nie mogę dodawać zakresu dla kategorii, ani głębokości. Struktura musi być taka jaka jest. Próbowałem nawet tworzyć jakieś procedury, ale udało mi się najwyżej pobrać 2 poziomy niżej niż rodzic, a już i tak nie wiem jak to zrobiłem.