2011-04-19 32 views
3

我有一個這樣的表。mysql + php檢索葉子路徑

+-----------+-----------+-----------+-----------+-----------+-----------+ 
|id   | parent_id | name  | order  | status | date_add | 
+-----------+-----------+-----------+-----------+-----------+-----------+ 
|1   | 0   | shoes  | 1   | 1   | 2011-04-02| 
+-----------+-----------+-----------+-----------+-----------+-----------+ 
|2   | 1   | male  | 2   | 1   | 2011-04-02| 
+-----------+-----------+-----------+-----------+-----------+-----------+ 
|3   | 1   | female | 3   | 1   | 2011-04-02| 
+-----------+-----------+-----------+-----------+-----------+-----------+ 
|4   | 3   | red shoes | 4   | 1   | 2011-04-02| 
+-----------+-----------+-----------+-----------+-----------+-----------+ 

我想只選擇葉子和他們的路徑。

我要來,結果如下:

+------+-------------------------------------+ 
| 2 | shoes/male       | 
+------+-------------------------------------+ 
| 4 | shoes/female/red shoes    | 
+------+-------------------------------------+ 

如果這樣做不僅SQL也可以是PHP + SQL

請幫助我。

+0

「最後一個孩子」應該是「葉」 – leonbloy 2011-04-19 18:36:12

+4

你已經試過了什麼?只是爲了看到你實際上已經努力解決這個問題。 – wimvds 2011-04-19 18:37:45

+0

我不理解你?什麼葉子?我很少說英語 – alioygur 2011-04-19 18:52:15

回答

1

非常簡單的解決方案,打印出使用PHP的所有最後一個孩子節點的ID和路徑,因爲我不知道在MySQL中這樣做的方式。希望這可以幫助!

function getChildren($parent= "", $x = 0) { 
    $sql = "SELECT id, name FROM recurr WHERE parentId = $x"; 
    $rs = mysql_query($sql); 
    //echo "Name: $parent has ". mysql_num_rows($rs)." children<br/>"; 
    while ($obj = mysql_fetch_object($rs)) { 
     if (hasChildren($obj->id)) { 
     getChildren($parent."/".$obj->name, $obj->id); 
     } else { 
     echo $obj->id .", ".$parent."/".$obj->name."<br/>"; 
     } 
    } 
} 

function hasChildren($x) { 
    $sql = "SELECT * FROM recurr WHERE parentId = $x"; 
    $rs = mysql_query($sql); 
    if (mysql_num_rows($rs) > 0) { 
     return true; 
    } else { 
     return false; 
    } 
} 

要運行只要致電:

getChildren();