2011-09-23 105 views
0

得到一個葉子節點我有一個類別結構如下通過遞歸查詢

enter image description here

我想選擇葉節點。我的意思是沒有子類別的類別。

在我的數據庫監視器中,cpu,小說和漫畫都會回答。

任何幫助將不勝感激。

編輯: 我試過了。

public function get_valid_categories($parent) 
     { 
       $has_childs = false; 
       foreach($this->categories as $key => $value) { 
        if ($value['parent'] == $parent) { 
         if ($has_childs === false) { 
          $has_childs = true; 
         } 
         else 
         { 
          $this->valid_categories[] = $value['name']; 
         } 
         $this->get_valid_categories($key); 

        } 
       } 
       if ($has_childs === true) 
       { 
        return $this->valid_categories ; 
       } 
     } 

和I M如下

get_valid_categories(0); 
+0

提示:選擇所有不是父母的ID,即不包含在'parent_Id'中的ID。 – glglgl

+0

@glglgl好的我會嘗試 –

回答

3

你並不需要爲這個遞歸查詢調用這個函數。以下SQL如何:

select t1.* 
from table t1 
    left join table t2 on t1.id = t2.parent_id 
where t2.id is null 

這需要您的表中的行和自連接來獲取每一行的子節點。然後通過檢查t2.id is null來篩選出那些沒有孩子的行。

+1

它的作品非常感謝你拯救我的一天。 –

+0

+1對我來說很愚蠢,所以我得去尋找這個簡單的querry。感謝它在我的情況也幫助。 –

2

嗯,有可能很多可能的解決方案,但在這裏的是,來到我的腦海裏第一個:

SELECT * 
FROM categories 
WHERE id NOT IN (
       SELECT DISTINCT(parent_id) FROM categories 
       ) 

不那麼優雅的使用連接,但可以爲這個問題的替代解決方案。 希望有所幫助。