2011-02-12 6 views
1

나는 자식 노드에서 트리를 만들 필요가있는 상황에있다. 즉, 자식 노드에서 부모 노드까지 travese해야한다. 내 질문은 가능하고 이것에 대한 알고리즘은 무엇인가?트리 계층 문제

미리 감사드립니다.

+0

데이터 구조의 예를 들려 줄 수 있습니까? –

+0

아래에서 위로 나무를 쌓아 올리는 작업이 꼭 위쪽으로 지나갈 필요는 없습니다. 당신이 달성하고자하는 것을 더 자세하게 설명하십시오. –

+0

예 : 나는 지금 나의 시나리오 중 하나에서 부모 자식 관계가있는 내 DB에 카테고리를 유지하고 있습니다. 특정 제품에 대한 부모와 함께 카테고리 만 표시해야합니다. 즉, 원하는 제품에만 해당하는 카테고리와 빌드해야하는 카테고리를 리트리브해야합니다. 트리 – programmer

답변

0

나는 당신이 찾고있는 것과 비슷한 것을했습니다. 사소한 조정으로이 방법이 효과가 있다고 생각합니다. Wordpressiness를 변명하십시오 - 당신은 어쨌든 그것이하고있는 무슨을 알아낼 수 있어야합니다.

function find_parents($category_id) { 

    global $wpdb; 

    $category = $category_id; 

    while (1) { 

     $parent_category = $wpdb->get_row(
      $wpdb->prepare("SELECT * FROM hierarchy WHERE id=%d", $category) 
     ); 

     $data[] = array(id => $parent_category->id, name => $parent_category->category_name); 

     if ($parent_category->parent_id == 0) { 
      break; 
     } 

     $category = $parent_category->parent_id; 

    } 

    return $data; 

} 

이렇게하면 항목이나 범주 및 그 이후의 각 부모가 역순으로 배열을 반환합니다.

기능은 위에서 아래 카테고리에서 반대 방향으로 이동하고 모든 카테고리를 검색하는 것입니다 : 두 사람 사이

function find_children($parent_id, $data) { 

    foreach ($data as $child) { 

     if ($child->parent_id == $parent_id) { 
      $children[] = array(
       'attr' => array(
        'id' => 'cat_' . $child->id, 
        'dbid' => $child->id, 
        'link_to' => $child->link_to, 
        'rel' => ($child->link_to ? 'link' : 'default') 
       ), 
       'data' => $child->category_name, 
       'children' => find_children($child->id, $data) 
      ); 
     } 

    } 

    return $children; 

} 

, 당신은 아마 뭔가를 함께 자갈 수 있습니다, 나는 희망 :/

+0

내 경우에는 답을 주셔서 감사합니다. 두 개 이상의 카테고리가 있고 카테고리가 동일한 상위 또는 하위 카테고리를 가질 수 있습니다. – programmer

+0

그래서 형제 수준의 카테고리를 찾고 싶습니까? –

+0

예 형제 범주 – programmer

1

계층 적 데이터를 나타 내기 위해 자기 참조 관계 (또는 인접 목록 모델)를 사용하는 것은 결코 좋은 생각이 아닙니다. 이를 수행하는 가장 좋은 방법은 간격 트리 또는 중첩 세트를 사용하는 것입니다. 지금까지이 주제에서 가장 잘 보았던 것은 MySQL Developer Zone 웹 사이트 인 here입니다. 나는 실제로이 기사 (및 기타 리소스)를 사용하여 Lambda Expressions를 사용하여 C#에서 자체 구현을 작성했습니다. 그러나 필자가 언급 한 기사는 개념을 설명하고 바로 사용할 수있는 SQL 코드를 보여주는 데 큰 도움이됩니다.