как составить sql-запрос или хранимую процедуру
чтобы дойти от верхнего уровня в нулевому
в таблице имеется id и id_parent
нужно найти id, у которого id_parent = 0
пример
входной параметр id = 10
[шаг 1] id = 10, id_parent = 8
[шаг 2] id = 8, id_parent = 6
..
[шаг 5] id = 2, id_parent = 0
т.о. для id = 10 нужный нам id = 2
Рекурсия - это почти всегда плохо, не только в СУБД, но и вообще в программировании в целом. Как правило оно намного более затратно по памяти и может привести к переполнению стека. Тогда как разница в скорости, если и лучше, то совсем незначительно.
Для правильного вопроса надо знать половину ответа
В запросе такого не сделать, но и рекурсивность тут не нужна, достаточно простого цикла. Можно написать хранимую функцию или процедуру, но если такой запрос нужно выполнять часто, то лучше сменить модель хранения и использовать Nested Set.
CREATE FUNCTION SearchRoot(id INT)
BEGIN
DECLARE parent INT;
SET parent = id;
REPEAT
SET id = parent;
SET parent = (SEARCH `id_parent` FROM `table` WHERE `id` = id);
UNTIL parent > 0 END REPEAT;
RETURN id;
END
В MySql не поддерживается возможность написания рекурсивных запросов.
Вообще тема иерахиии данных довольно щепетильна для реляционной БД.
В ващем случае часть логики можно перенести куда-то(например, PHP... или что-то другое, что используется).