2011-09-05 46 views
-1

的結果,選擇我有一個表,看起來是這樣的:從相同的查詢

id parent_id name 
1 0   page #1 
2 1   Page #2 
3 1   Page #3 
4 2   Page #4 

* PARENT_ID *被realated到ID。

頁面#4是頁面#2的子頁面 和頁面#2是頁面#1的子頁面 ,頁面#3也是如此。

我需要一個mysql查詢,可以讓所有的孩子,說ID 1. 這將返回所有這些頁面,因爲所有頁面「主父母」(哈哈)是頁面#1。

+0

http://stackoverflow.com/questions/990529/mysql-how-to-find-all-ids-of-children-recursively –

回答

1

你基本上有兩種選擇:

  • 使用遞歸,無論是在你的應用程序邏輯或查詢,如果您的RDBMS支持

  • 在每個節點上存儲的左/右值的樹,它可以讓你輕鬆找到一個節點

這兩項方案都覆蓋在sitepoint的優秀文章的所有子樹,http://www.sitepoint.com/hierarchical-data-database/(但它不包括RDBMS遞歸,你可能不支持)

+0

謝謝,我會盡力的。 – Patrik

0

想到我只是爲這個問題留下了一個解決方案。不只是在MySQL中,但與PHP。

這是一個函數,它自己調用它來檢查當前頁面(在循環中)是否有孩子。 它將返回一個包含所有子項(包括父項)標識的數組。

public function getPageChildren($parent_id) { 
    $result = mysqli_query($con, 'SELECT id FROM pages WHERE parent_id = '.$parent_id); 
    while($children = mysqli_fetch_assoc($result)) { 
     if($children) { 
      $childrenArray[] = $children['id']; 
      $childrensChildren = getPageChildren($children['id']); 

      foreach($childrensChildren as $childrensChild) { 
       $childrenArray[] = $childrensChild; 
      } 
     } 
    } 
    return $childrenArray; 
}