2012-03-05 2 views
0

나는 세 개의 열이있는 테이블이 있습니다 : id, refcatName입니다. 모든 행에는 하위 카테고리가 될 수있는 카테고리가 포함됩니다. 그렇다면 기본 카테고리의 ID에 대한 ref 컬럼 참조보다. 물론이 방법을 사용하면 수많은 하위 카테고리를 만들 수 있습니다.조건이 충족 될 때까지 php 메서드를 실행하십시오.

이제 모든 부모 중 catName 명이 포함 된 모든 카테고리에 대해 URL을 만들고 싶습니다.

private function getCatUrl($cat, $ur = array()){ 
     $sql = "SELECT * FROM shop_cat WHERE id = :id LIMIT 1"; 
     $st = $this->db->prepare($sql); 
     $st->bindParam('id', $cat, PDO::PARAM_INT); 
     $st->execute(); 

     $rij = $st->Fetch(); 
     $ur[] = urlencode($rij['naam']); 

     if($rij['ref'] == 0){ 
      //Done, I've reached the top parent; 
      return implode('/',$ur); 

     }else{ 
      //there is a parent/reference above this level 
      //getting there 
      $this->getCatUrl($rij['ref'], $ur); 

     } 

    } 

어쨌든 이것은 상위 상위 항목에만 $ ur를 생성하고 하위 항목에는 $ ur가 생성되지 않습니다. 내가 뭘 잘못하고 있니? 데이터베이스의

샘플 :

id ref catName 
1 0 GroundFloor 
4 1 Portal 
5 1 Stairs 

2 0 FirstFloor 
6 2 DiningArea 
12 6 Chair 
7 2 Toilet 
9 2 SittingRoom 
10 9 Couch 
11 9 Dresser 

3 0 Roof 
8 3 LoungeChair 
+0

DB의 데이터 예제를 포함 할 수 있습니까? 그리고 당신이이 함수를 호출하는 방법의 예 (즉, 어떤 params) – ManseUK

답변

0

잘못하고 있습니다.

나는 (이 두 번째 장에서 나무를 커버)을 SQL Antipatterns 책을 읽고 또한 폐쇄 테이블 [1][2][3]을 조사하는 것을 권장하고있다.

0

오류는 재귀가 정지 할 때, 결과가 "최대 버블"호출 스택은 마지막으로 함수의 첫 번째 호출이 상태로 돌아올 때까지 확인하지 않는다는 것입니다 발신자. 코드에서 :

return $this->getCatUrl($rij['ref'], $ur); // add the return! 
관련 문제