2011-10-20 3 views
-1

저는 데이터베이스에 트리 구조가 있습니다 (예 : 직원 용).php tree bottom up

create table "employees" (employee_id, name, manager_id); 

물론 manager_id는 해당 직원의 관리자와 동일한 employee_id (동일한 테이블)입니다.

의 트리 구조를 나타내는 배열로 쉽게 변환 할 수 있습니다 (상단에 CEO가 하나도 없지만 루트 노드에 여러 요소가 있음). 지금까지 괜찮아.

지금, 등록을 처리하기 위해, 나는 가기 나는 그 직원의 매니저가 표시되는 트리 구조, 사람들을 (표시해야합니다 것 employee_ids

$registrations = array(3,7, 10); 

의하지만 최대 배열이 나무의). 아무도 이것에 대한 알고리즘을 가지고 있습니까? 나는 나무에 그것들을 추가 할 수 있었지만, 2 명의 사람들이 1 명의 매니저를 공유 할 때 서로 다른 가지를 함께 관리하지는 않았다.

직원 3과 10 (위의 cfr)은 ID 15의 동일한 관리자를 공유하고 직원 7은 ID 23의 관리자를 보유하고 있으며 두 관리자는 ID 33의 동일한 관리자에게보고하고 자신의 차례에는 45로보고합니다. 내가

array('45'=>array('33'=>array('15'=>array(3)))); 

를 얻을 수 및 직원 7 반복하면서, 나는 지점을 구축 관리 배열 I 직원 3로 시작하는이 구조, 예를 구축 관리하는

array('45'=>array('33'=>array('23'=>array(7), '15'=>array(3,10)))); 

필요 했어

array(23->array(7)) 

하지만 어떻게 새 배열을 기존의 병합으로 병합 할 수 있습니까? 나는 23의 관리자가 33 인 것을 알고 있지만, 나는 그것을 나무에 추가 할 필요가 있음을 발견하고, b) 그것을 나무에 덧붙여 정확한 위치에 놓는다. 아무도?

답변

-1

제 의견으로는 트리 데이터를 데이터베이스에 저장하는 잘못된 방법을 선택했습니다.

트리 데이터를 데이터베이스에 저장하려면 수정 된 선주문 트리 순회를 사용해야합니다. 이 알고리즘으로 http://www.sitepoint.com/hierarchical-data-database/

당신은 당신이 좋아하는 임의의 순서로 데이터를 관리 할 수 ​​있습니다 당신은 쉽게 당신이 원하는대로 정보를 추출 할 수 있습니다 : 데이터베이스에서 나무 당신이 여기에서 찾을 수를 저장하는이 방법에 대한

더 많은 정보!

+0

나는 다운 투표의 이유를 알 수 있습니까? –

+0

좋은 힌트, 그러나 문제 자체에 해결책 없음 – Eineki

+0

Merianos Nikos : 재미있는 연결, 감사합니다. 하지만이 기사의 첫 번째 기사에서 "수정 된 Preorder Tree Traversal"데이터베이스 스키마를 사용하여 문제를 해결하는 방법은 여전히 ​​불분명합니다. 문제는 여전히 지속됩니다. 두 번째 지점을 트리에 배치해야하는 위치를 찾는 방법은 무엇입니까? – user410932