2012-03-05 8 views
0

私は、3列のテーブル:id,refおよびcatNameを持っています。すべての行には、サブカテゴリとなるカテゴリが含まれています。そのような場合は、メインカテゴリの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を生成するだけで、子のためには生成しません。 私は何が間違っていますか?データベースの

サンプル:

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

あなたは間違っています。

私はあなたが閉鎖テーブル[1][2][3]を検討するためにお勧めします、また、(それは第二章で木をカバー)SQL Antipatterns本を読んでいました。

0

エラーは、再帰が停止した場合、結果は「アップバブル」コールスタックが最終的に関数の最初の呼び出しがに戻るまでことを確認していないということです呼び出し側。コード内:

return $this->getCatUrl($rij['ref'], $ur); // add the return! 
関連する問題