Задача: "Выбрать всех начальников" - MySQL

Узнай цену своей работы

Формулировка задачи:

Люди, здравствуйте. Есть таблица сотрудников с полем-ссылкой на эту же таблицу - это и есть тот самый "начальник сотрудника". Задача - выбрать всю цепочку начальников от прямого до гендиректора. Если бы инфа была в какой-нибудь коллекции, а язык решения - Си-подобный, то решение было бы достаточно простым и понятным. Время решения - от n^2 (если никакой индексации нет) до n*log(n) (если имеется логарифмический поиск/доступ к отдельной записи). Время решения на сиквеле - инфинити. Ибо просто не знаю, как это сделать. Помогите, пожалуйста.

Решение задачи: «Задача: "Выбрать всех начальников"»

textual
Листинг программы
  1. mysql> select hp.id, hp.pid, hp.lft, hp.rht, hp.dsc
  2. -> from tst_tree hc
  3. -> join tst_tree hp
  4. -> on MBRWithin(point(0, hc.lft), hp.sets)
  5. -> where hc.id = 37
  6. -> order by hp.lft;
  7. +----+-----+-----+-----+----------------------------+
  8. | id | pid | lft | rht | dsc |
  9. +----+-----+-----+-----+----------------------------+
  10. | 1 | 0 | 1 | 110 | 1 |
  11. | 2 | 1 | 38 | 109 | 1 -> 1 |
  12. | 26 | 2 | 39 | 62 | 4 -> 1 -> 1 |
  13. | 35 | 26 | 40 | 45 | 6 -> 4 -> 1 -> 1 |
  14. | 37 | 35 | 41 | 42 | 2 -> 6 -> 4 -> 1 -> 1 |
  15. +----+-----+-----+-----+----------------------------+
  16. 5 rows in set (0.00 sec)
  17. mysql>

Объяснение кода листинга программы

  1. Задача: Выбрать всех начальников
  2. В коде используется язык запросов MySQL.
  3. В запросе используется оператор JOIN для объединения двух таблиц: tst_tree и tst_tree.
  4. В условии WHERE указывается, что нужно выбрать только те строки, где id равен 37.
  5. Используется функция MBRWithin для сравнения значений в столбцах lft и rht таблицы tst_tree.
  6. В результате выбираются следующие столбцы: id, pid, lft, rht, dsc.
  7. Результаты сортируются по значению в столбце lft.
  8. В результате выполнения запроса выводится 5 строк.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы