Задача: "Выбрать всех начальников" - 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>

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

  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
Похожие ответы