silentvick
@silentvick

Как восстановить поля lft и rgt в nested set таблице по root_id?

Есть таблица построенная по модели nested set. В ней повреждены поля lft и rgt, но сохранились root_id. Как можно восстановить (пересчитать) значения полей lft и rgt, используя только средства SQL (MySQL)?
+----+---------+-------+-------+
| id | root_id |  lft  |  rgt  |
+----+---------+-------+-------+
|  1 |       1 |  NULL |  NULL |
+----+---------+-------+-------+
|  2 |       1 |  NULL |  NULL |
+----+---------+-------+-------+
|  3 |       2 |  NULL |  NULL |
+----+---------+-------+-------+
|  4 |       4 |  NULL |  NULL |
+----+---------+-------+-------+
|  5 |       4 |  NULL |  NULL |
+----+---------+-------+-------+
  • Вопрос задан
  • 3563 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для приведённой таблицы - никак. Узлы 1 и 4 имеют родителями самих себя.
В общем случае - добавить колонку `level` - уровень узла и, поскольку сделать надо всё средствами SQL, написать хранимую процедуру, которая проставит каждой строке уровень узла и перестроит поля `lft`и `rgt` каждой строке в порядке возрастания `level` (см. статью).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы