хранить иерархические данные в MySQL - PullRequest
0 голосов
/ 02 апреля 2012

В моем приложении есть объект "Отдел" с иерархической структурой.

И когда я перечисляю отдел на странице, я хочу сделать его отступом в качестве уровня в иерархическом дереве, поэтому я добавляю столбец deep, чтобы определить местоположение текущего отдела.

Это таблица:

department_id   parent_id   deep

1               NULL        1
2               1           11
3               1           12
4               2           21
5               3           31
6               2           22
7               6           221

Я отображаю их таким образом:

.indent1:{margin-left:5px;}
.indent2:{margin-left:10px;}
.indent3:{margin-left:15px;}
<#list depList as dep>
  <span class="indent${dep.deep?length}">${dep.name}</span>
</#list>

Затем, каждый раз, когда я вставляю новую запись, мне нужно вычислить значение ее deep, я хочу знать, какой способ наиболее эффективен?

Например:

Если создается новый отдел, его paren_id равен 2, тогда в глубине, если этот отдел должен быть вставлен, должно быть '23', и я хочу знать, как рассчитать значение 23, любое предложение?

Обновление:

Похоже, что qasting теперь реализован в sql:

Я хочу выбрать поле максимальной длины для данного родителя.

Я могу получить значение максимальной длины только во всей таблице:

select deep from t_department where length(deep)=(select max(length(deep)) from t_department);

Но как насчет того, если под данным родителем?

...