Както беше казано в коментарите, няма кратък път с mysql.
НО!
Ако имате възможност да промените структурата на базата данни, можете да разгърнете по-добър дизайн за работа с дървовидни йерархии.
Ако следвате ТОЗИ ИНСТРУКЦИЯ от Бил Карвин (ТУК е оригиналният отговор, който препраща към урока за слайдшоу), можете да намерите 4 метода, използвани за моделиране на йерархична структура:
- Списък на Adiacency
- Изброяване на пътя
- Вложени набори
- Таблица за затваряне
Сега най-добрият възможен модел е 4-ият (оставям описания на другите 3 модела на читателя), който основно се нуждае от 2 таблици:една за елементите и една за пътеките. В таблицата с пътищата (самата таблица за затваряне) ще съхранявате всеки път от всеки възел до всеки потомък (не само преките деца!).
Препоръчва се да запазите и дължината на пътя за всеки ред, тъй като това улеснява заявката за непосредствени деца в дървото.
Дори ако това решение изисква повече пространство, то има най-добрата цялостна производителност и е наистина лесно за използване:изобщо не разчита на рекурсивни заявки И ще предостави референтна цялост за целия набор от данни!
Например, за да получите всяко дете на възел #4:
select a.*
from nodes a
join paths b
on a.node_id = b.descendant
where b.ancestor = 4
Друг пример:вземете всички предшественици на възел #11
select a.*
from nodes a
join paths b
on a.node_id = b.ancestor
where b.descendant = 11
трябва да изтриете поддървото на възел #6
delete from paths where descendant in
(select descendant from paths where ancestor = 6)