[트리구조]
LV0 LV1 LV2 LV3
Root ─┬─ A ─┬─ AA1
│ └─ AA2
└─ B ─┬─ BB1
├─ BB2 ── BBB1
└─ BB3
[테이블 구조] (트리구조와 ID 연관성 없음 - ID는 시각적 편의를 위해 규칙적으로 예를 들었음)
| ID | P_ID | LV |
| Root | 0 | |
A | Root | 1 |
AB1 | A | 2 |
AB2 | A | 2 |
B | Root | 1 |
BB1 | B | 2 |
BB2 | B | 2 |
BB3 | B | 2 |
BBB1 | B2 | 3 |
위의 형태를 VB Treeview를 사용하여 처리중.
[변경된 트리구조]
LV0 LV1 LV2 LV3
Root ─┬─ A ─┬─ AA1
│ └─ AA2
├─ BB2 ── BBB1
└─ B ─┬─ BB1
└─ BB3
LV2 에 있던 B의 자식 노드 BB2 가 LV1 로 옮겨지면서
BB2 에 속해있는 하위 노드의 LV 가 모두 1씩 감소되는 Update 처리 방법은 어떤게 좋을까요?
단, 자식노드의 수는 한정 없음, 레벨이 더 깊어 질수도 있음,
(LV 컬럼을 사용하는 이유 : 트리뷰 작성 시 부모노드를 먼저 생성해주어야 자식노드 생성가능,
자식노드가 먼저 생성하려 할 시 오류발생, Order by LV로 조회하여 부모노드 행부터 노드 추가 방식)
if 변경노드.Chlidren > 0 then '자식노드가 있다면
SQL = " Update NodeTable set LV = LV - 1 " & _
" where P_ID = 변경노드의 ID "
(Oracle 9i, VB 사용)
현재 생각한 내용은 (프로그램 내에서 재귀호출 방법인데 잘 못 돌면 무한루프에 빠질수도 있고해서
비효율적인거 같고 Sql 쿼리를 잘 작성하면 더 좋은 방법이 있을듯합니다만 잘 모르겠네요..ㅠㅠ.)
쿼리문이나 괜찮은 알고리즘 또는 함수가 있다면 주저말고 답글남겨주세요~(__