2012-03-19 4 views
7

PHP (CodeIgniter)와 MySQL을 사용하는 웹 사이트에 대해 MLM 트리를 구현 중입니다. 데이터베이스에 이진 트리 구현이 필요합니다. 다음과, 상황이 고려되어야한다 : 각 노드에 대해PHP + MySQL을 사용하는 이진 트리

  1. , 왼쪽 하위 트리에있는 어린이/노드의 수와 자녀 수의 최소/오른쪽 하위 트리 노드가 한 쌍이라고합니다. 각 쌍에 대해 하나의 노드가 1 점을 얻습니다. 이는 데이터베이스에 저장되어야합니다 (노드는 사용자를 나타냄).

  2. 새 노드가 만들어지면 많은 쌍의 노드가 증가 할 수 있습니다. 따라서 노드가 생성 될 때마다 모든 노드의 점을 업데이트해야합니다 (적용 가능한 경우 1 씩 증가).

  3. 다른 제한은 노드가 100 개를 초과 할 수 없음을 의미합니다.

  4. 또한 트리를 구성해야합니다 (웹 페이지에 표시). 4-5 단계 만 표시됩니다.

  5. 데이터베이스는

    1. 인접리스트
    2. 경로 열거
    3. PHP

      100000 개 노드

    내가 MySQL의에서 hieararchical 데이터를 implemmenting 주로 4 개 모델을 찾았을 가능성이 중첩 세트

  6. 클로저 테이블

그래서 삽입 오버 헤드를 줄이고 적용 가능한 모든 노드에 대해 포인트를 성공적으로 업데이트하는 솔루션을 찾고 싶습니다.

인접 목록 솔루션을 사용해 보았습니다.

node (id, parentid, leftChildId,rightChildId,leftCount,rightCount) 
userStat(id,sdate,pairs,mlmIncome) 

하나 개의 노드가 삽입 될 때마다, 나는 위로 가서 아이를 증가 유지는 .If 새로운 쌍은 내가 저장 프로 시저와 함께이 일을하고 .. 나는 또한 증가하고 포인트를 증가 후 만들어 계산합니다.

내가이 솔루션을 중첩 세트보다 많이 선택한 이유는 각 노드가 삽입 될 때마다 인데, 중첩 세트에 대해 업데이트 할 노드 수는 항상 인접성 목록보다 많습니다.

트리를 구성하는 비율이 삽입보다 많지만. 그리고 중첩 세트는 나무를 만들 때 더 좋습니다.

나는 올바른 방향으로 있습니까 ?? 도와주세요 !

Thnx in Advance!

+0

이은을 downvoted 이유를 이해할 수 없다, 완벽하게 합리적인 질문을 보인다 가능합니다! +1 – dmp

+0

thnx danp, 해결 방법도 알려주세요. –

+0

내가 CodeIgniter의에서 폐쇄 테이블 계층 구조를 구현의 중간에있어,이 코드를 참조하는 것이 유용하다? – dmp

답변

1

이 블로그는 managing hierarchy data

질문에 가장 익숙한 소리 하나에 당신을 도울 수는 Modified Preorder Tree Traversal

+0

Thnx 필립 코드를 필요 없어요. 사실이 질문을하기 전에 두 기사를 읽었습니다. 내가 솔루션을 따라 whitch를 결정하지 못할 ..... 내가 그것을 가지고 삽입 오버 헤드에 대해 걱정하지만 중첩 된 세트가, 나에게 더 나은 것 같다. –