ildarkhasanshin
@ildarkhasanshin
developer

Как сделать рекурсию в запросе?

как составить 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
  • Вопрос задан
  • 312 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В запросе такого не сделать, но и рекурсивность тут не нужна, достаточно простого цикла. Можно написать хранимую функцию или процедуру, но если такой запрос нужно выполнять часто, то лучше сменить модель хранения и использовать 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
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
В MySql не поддерживается возможность написания рекурсивных запросов.
Вообще тема иерахиии данных довольно щепетильна для реляционной БД.
В ващем случае часть логики можно перенести куда-то(например, PHP... или что-то другое, что используется).

P.S. https://habrahabr.ru/post/43955/
Ответ написан
Комментировать
TroL929
@TroL929
веб-программист
А зачем? Наверняка после получения будешь обрабатывать данные через php, там как раз и можно будет настроить древовидную структуру
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы