Форум программистов, компьютерный форум, киберфорум
Наши страницы
MySQL
Войти
Регистрация
Восстановить пароль
 
FloppyDisc
Особый статус
551 / 163 / 135
Регистрация: 18.11.2015
Сообщений: 918
#1

Adjacency List - Максимальный уровень вложенности - MySQL

01.12.2017, 17:06. Просмотров 142. Ответов 2
Метки нет (Все метки)

Здравствуйте!

Помогите с парочкой вопросов. Есть таблица смежностей
idparent_id name sort_order
1 0 F1 1
2 0 F2 3
3 0 F3 2
4 1 F4 1
5 2 F5 2
6 1 F6 2
7 10 F7 1
8 2 F8 1
9 10 F9 2
10 3 F10 2
11 3 F11 2
12 9 F12 1
13 9 F13 2

Как определить максимальный уровень вложенности вложенности? Я попробовал хранимую процедуру, но она мне не подходит, не знаю почему, но после нее остальные запросы не работают Мб её можно переделать в функцию?
Вот она:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
BEGIN
 DECLARE R INT;
 DECLARE D INT;
 SET D=0;
 DROP TEMPORARY TABLE IF EXISTS children;
 CREATE TEMPORARY TABLE children AS (SELECT id AS ids
                                       FROM description_table 
                                      WHERE internal_key IS NOT NULL);
 DROP TEMPORARY TABLE IF EXISTS children_prev;
 CREATE TEMPORARY TABLE children_prev AS (SELECT * FROM children );
 SET R = ( SELECT COUNT(*) FROM children ); 
 WHILE ( R > 0 ) DO
   DROP TEMPORARY TABLE IF EXISTS children_aux;
   CREATE TEMPORARY TABLE children_aux AS (
     SELECT id AS ids
       FROM description_table R  
       INNER JOIN  children_prev C ON C.ids = R.internal_key
   );
   SET R = ( SELECT COUNT(*) FROM children_aux );  
   INSERT INTO children 
      SELECT * FROM children_aux;
   TRUNCATE TABLE children_prev;
   INSERT INTO children_prev
      SELECT * FROM children_aux;   
   SET D=D+1;
 END WHILE;
 SELECT D;
END


В данном примере должно быть 4
0
Миниатюры
Adjacency List - Максимальный уровень вложенности  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2017, 17:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Adjacency List - Максимальный уровень вложенности (MySQL):

Запрос: вернуть максимальный уровень вложенности
Возможно ли сделать такой запрос который вернёнт цифру максимального уровня...

Найти максимальный уровень вложенности заданного списка
Помогите написать программу, которая находит максимальный уровень вложенности...

Уменьшить уровень вложенности
Всем доброго вечера. Нужна помощь по Битриксу. Нужно уменьшить уровень...

Ограничение на уровень вложенности
Доброго времени суток. Столкнулся с проблемой при автоматической генерации...

Изменить уровень вложенности url
Нужна ваша помощь. Тармошил сообщество instantcms, но оно похоже бессильно. В...

Обработать каждый уровень вложенности отдельно
Нужно обработать каждый уровень вложенности отдельно относительно какой-то...

2
retvizan
284 / 276 / 102
Регистрация: 09.04.2011
Сообщений: 777
01.12.2017, 17:48 #2
такая задача легко решается с помощью рекурсивных отв (доступны в mysql8/mariadb10.2), в более ранних их можно реализовать с помощью хранимой процедуры, см статью ( в ней есть шаблон процедуры)
0
FloppyDisc
Особый статус
551 / 163 / 135
Регистрация: 18.11.2015
Сообщений: 918
01.12.2017, 17:59  [ТС] #3
retvizan, как раз таки процедура мне не очень нужна, я уже писал выше ее, считает она правильно. Видимо придется пересеть на mariadb, под рукой нет mysql8
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2017, 17:59
Привет! Вот еще темы с решениями:

Loadstring и бесконечный уровень вложенности таблицы
t={s={}} loadstring("t.s.s=t.s")() Выполнение этого скрипта приводит к...

Хранимые процедуры-превышен уровень вложенности
Здравствуйте! Помогите, пожалуйста, разобраться со вложенностью процедур. В...

Как из ссылки ЧПУ убрать один уровень вложенности? (Yii)
Как из ссылки убрать один уровень вложенности? есть ссылка...

Найти букву среди цифр в списке с подсписками и вывести уровень ее вложенности
Помогите, пожалуйста, со следующим заданием: Написать предикат, который ищет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru