Задача: "Выбрать всех начальников" - MySQL
Формулировка задачи:
Люди, здравствуйте.
Есть таблица сотрудников с полем-ссылкой на эту же таблицу - это и есть тот самый "начальник сотрудника". Задача - выбрать всю цепочку начальников от прямого до гендиректора.
Если бы инфа была в какой-нибудь коллекции, а язык решения - Си-подобный, то решение было бы достаточно простым и понятным. Время решения - от n^2 (если никакой индексации нет) до n*log(n) (если имеется логарифмический поиск/доступ к отдельной записи).
Время решения на сиквеле - инфинити. Ибо просто не знаю, как это сделать.
Помогите, пожалуйста.
Решение задачи: «Задача: "Выбрать всех начальников"»
textual
Листинг программы
mysql> select hp.id, hp.pid, hp.lft, hp.rht, hp.dsc -> from tst_tree hc -> join tst_tree hp -> on MBRWithin(point(0, hc.lft), hp.sets) -> where hc.id = 37 -> order by hp.lft; +----+-----+-----+-----+----------------------------+ | id | pid | lft | rht | dsc | +----+-----+-----+-----+----------------------------+ | 1 | 0 | 1 | 110 | 1 | | 2 | 1 | 38 | 109 | 1 -> 1 | | 26 | 2 | 39 | 62 | 4 -> 1 -> 1 | | 35 | 26 | 40 | 45 | 6 -> 4 -> 1 -> 1 | | 37 | 35 | 41 | 42 | 2 -> 6 -> 4 -> 1 -> 1 | +----+-----+-----+-----+----------------------------+ 5 rows in set (0.00 sec) mysql>
Объяснение кода листинга программы
- Задача:
Выбрать всех начальников
- В коде используется язык запросов MySQL.
- В запросе используется оператор JOIN для объединения двух таблиц: tst_tree и tst_tree.
- В условии WHERE указывается, что нужно выбрать только те строки, где id равен 37.
- Используется функция MBRWithin для сравнения значений в столбцах lft и rht таблицы tst_tree.
- В результате выбираются следующие столбцы: id, pid, lft, rht, dsc.
- Результаты сортируются по значению в столбце lft.
- В результате выполнения запроса выводится 5 строк.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д