Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / получить всех предков в иерархии / 7 сообщений из 7, страница 1 из 1
19.07.2019, 12:33
    #39839165
waszkiewicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить всех предков в иерархии
таблица классическая - {id;parentid)
MySql - 5.7.23-24
ума не приложу, как получить всех предков для известного id
...
Рейтинг: 0 / 0
19.07.2019, 14:11
    #39839231
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить всех предков в иерархии
Хранимой процедурой, вестимо... версия старая, про рекурсивные CTE не знает.
...
Рейтинг: 0 / 0
19.07.2019, 14:40
    #39839250
waszkiewicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить всех предков в иерархии
Akina,
уже знаю, что не знает. на сервере провернуть это дело возможно или на клиенте рекурсию раскручивать? (не хотелось бы)
...
Рейтинг: 0 / 0
19.07.2019, 14:53
    #39839259
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить всех предков в иерархии
Хранимая процедура - она, знаете ли, на сервере хранимая. И на сервере же исполнимая.
...
Рейтинг: 0 / 0
19.07.2019, 14:56
    #39839264
waszkiewicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить всех предков в иерархии
Akina,
сарказм понятен и думаю здесь уместен.
MySql умеет вызывать хранимки рекурсивно?
...
Рейтинг: 0 / 0
19.07.2019, 15:25
    #39839293
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить всех предков в иерархии
waszkiewiczMySql умеет вызывать хранимки рекурсивно?

С использованием велосипедов может: пример
...
Рейтинг: 0 / 0
19.07.2019, 15:34
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / получить всех предков в иерархии / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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