powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / получить всех предков в иерархии
7 сообщений из 7, страница 1 из 1
получить всех предков в иерархии
    #39839165
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблица классическая - {id;parentid)
MySql - 5.7.23-24
ума не приложу, как получить всех предков для известного id
...
Рейтинг: 0 / 0
получить всех предков в иерархии
    #39839231
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранимой процедурой, вестимо... версия старая, про рекурсивные CTE не знает.
...
Рейтинг: 0 / 0
получить всех предков в иерархии
    #39839250
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
уже знаю, что не знает. на сервере провернуть это дело возможно или на клиенте рекурсию раскручивать? (не хотелось бы)
...
Рейтинг: 0 / 0
получить всех предков в иерархии
    #39839259
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранимая процедура - она, знаете ли, на сервере хранимая. И на сервере же исполнимая.
...
Рейтинг: 0 / 0
получить всех предков в иерархии
    #39839264
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
сарказм понятен и думаю здесь уместен.
MySql умеет вызывать хранимки рекурсивно?
...
Рейтинг: 0 / 0
получить всех предков в иерархии
    #39839293
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewiczMySql умеет вызывать хранимки рекурсивно?

С использованием велосипедов может: пример
...
Рейтинг: 0 / 0
получить всех предков в иерархии
    #39839308
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данной задаче это нафиг не нужно. Обычная итерация, пока не NOT FOUND. Или глухой зависон, если данные зациклены (впрочем, можно там же сделать и проверку на циклы).

Схематически:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE PROCEDURE get_all_parents (IN starting_id)
BEGIN
CREATE TEMPORARY TABLE tmp (id INT UNIQUE);
SET @id:=starting_id;
SET @done:=0;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @done:=1;
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @done:=1;
WHILE NOT @done
    INSERT INTO tmp VALUES (@id);
    SELECT parent_id INTO @id WHERE id=@id;
END WHILE
SELECT id FROM tmp
DROP TEMPORARY TABLE tmp;
END
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / получить всех предков в иерархии
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]