2011-10-08 2 views
0

다음 시나리오에서 값의 배열을 반환하는 간단한 (!) PHP 함수를 작성하는 데 문제가 있습니다.메뉴, 항목 등의 최저 수준을 결정하는 PHP 재귀 함수/루프

'parent_id'및 'category_id'두 필드에 상위 및 하위 카테고리 (예 : 메뉴, 하위 메뉴, 하위 하위 메뉴) 만 나열하는 데이터베이스 테이블이 있습니다. 나는 모든 하위 category_ids를 꺼내기 위해 테이블을 터널링하고 싶다. 즉, 어떤 다른 사람에게는 '부모'로 나열되어 있지는 않지만, category_id는 함수에 입력 된 자식 (또는 그랜드 자식 또는 위대한 자식)이다.

내가 입력 아이가 함수에 대한 값은 다음 배열 사람들을 생산할 경우 SQL 쿼리 물건

function tep_get_bottom_categories($categories_id) { 
    $bottom_categories_query = tep_db_query("select categories_id from categories where parent_id = '" . $categories_id . "'"); 
    while ($bottom_categories = tep_db_fetch_array($bottom_categories_query)) { 
     if(XXXXXXXXXXXXX)//<---- tried lots of stuff here 
      {$results[]=$bottom_categories['categories_id'];} 
     else 
      {tep_get_bottom_categories($bottom_categories['categories_id']); 
     } 
    }//end while loop 
}// end function 

이상한 보이는 있도록이 같은 비트가 (이 osCommerce에 기반 코드에서 실행되는 기능을 가지고 $ bottom_categories를 찾은 다음 마지막 하위 카테고리까지 똑같은 방법으로 수행합니다. 그러나 XXXXXXXXXXXXXX가 어디에 있는지 알아볼 필요가 있지만 $ results 배열에 배치되지는 않습니다.하지만 이는 evadi입니다. 나를 강력하게 응원해라.

내가 어떤 식 으로든 함수의 각 루프에 레이블을 필요로하지만 난 방법을 보려면 실패 있으리라 믿고있어

- 감사합니다 - 그레엄

+0

완전히 다른 접근 방식을 동일한 문제가 예약 주문 트리 순회를 수정 한 것입니다 해결하기 위해. 아마도 너무 많은 변화가있을 것입니다. – Paul

답변

0

난 항상 다른 케이스를 실행하고 쿼리가 어떤 결과를 가지고 있는지 확인 것 . 자녀가 없다면 준비가되어 있으며 그것을 목록에 삽입하십시오. 그렇지 않으면 이전과 동일합니다.

예제 코드 :

function tep_get_bottom_categories($categories_id) { 
    $bottom_categories_query = tep_db_query("select categories_id from categories where parent_id = '" . $categories_id . "'"); 

    if(/* check num_rows == 0 */ { 
    {$results[]=$categories_id;} 
    } else { 
    while ($bottom_categories = tep_db_fetch_array($bottom_categories_query)) { 
     {tep_get_bottom_categories($bottom_categories['categories_id']);} 
    }//end while loop 
    } 
}// end function 
+0

마스터 카심에게 감사드립니다 - 매력처럼 작동합니다! –

1

당신은 SQL에서 순수하게이 작업을 수행 할 수 있습니다

SELECT category_id, (SELECT count(*) 
        FROM categories AS ci 
        WHERE ci.parent_id=co.category_id) AS children 
FROM categories AS co 
WHERE parent_id=xxxxx 
HAVING children=0