2011-04-29 53 views
0

我不知道我將如何使用PHP MySQL的&顯示我的分層數據創建我的類別和無盡的子類別分類任何子依種類?PHP和MySQL如何顯示從數據庫

我的PHP & MySQL的代碼應該怎麼看起來像將幫助了很多一個簡單的例子。

MySQL表類別結構

id parent_id category 
1 0   a & w 
2 0   b & f 
3 1   c & sometimes y 
4 1   d 
+0

怎麼會來幫助我的人,我已經有我的表結構。 – html5 2011-04-29 05:04:16

+0

MySQL沒有分層支持;檢查你的桌子,以確保你能得到你想要的東西。 – 2011-04-29 05:05:44

+0

我一直在尋找如何使用PHP輸出代碼。 – html5 2011-04-29 05:07:16

回答

8

當然,這是可能的。此代碼將呈現一個<ul> <li>分層樹,無論層數的

<?php 
    //Connect to mysql server 
    $cn = mysql_pconnect("server", "username", "password"); 
    mysql_select_db("database_name"); 
    $rs = mysql_query("SELECT id, parent_id, category FROM categories", $cn); 
    $childrenTree = array(); //Will store an array of children for each parent 
    $categoryNames = array(); //Will store category name for each id 
    //We fill $childrenTree and $categoryNames from database 
    while($row = mysql_fetch_array($rs)){ 
    list($id, $parent_id, $category) = $row;  
    $categoryNames[(string)$id] = $category; 
    $parent_id = (string)$parent_id; 
    if(!array_key_exists($parent_id, $childrenTree)) 
     $childrenTree[$parent_id] = array(); 
    $childrenTree[$parent_id][] = (string)$id; 
    } 

//Main recursive function. I'll asume '0' id is the root node 
function renderTree($parent = "0"){ 
    global $categoryNames; 
    global $childrenTree; 
    if($parent != "0") echo "<li> ", $categoryNames[$parent], "\n"; 
    $children = $childrenTree[$parent]; 
    if(count($children) > 0){ //If node has children 
     echo "<ul>\n"; 
     foreach($children as $child) 
      renderTree($child); 
     echo "</ul>\n"; 
    } 
    if($parent != "0") echo "</li>\n"; 
} 
renderTree(); //This renders the hierarchical tree 
?> 

爲您的例子產生的HTML將是:

<ul> 
    <li> a & w 
    <ul> 
     <li> c & sometimes y </li> 
     <li> d </li> 
    </ul> 
    </li> 
    <li> b & f </li> 
</ul> 

這將在這樣的瀏覽器渲染:

  • a&w
    • c&有時y
    • d
  • B&F

我再說一遍,這適用於任何級別的嵌套。 希望這有助於。

+0

感謝您的幫助 – html5 2011-04-29 05:53:05

+0

不客氣。你可以請我的解決方案投票嗎? 。 – 2011-04-29 05:59:26

+0

由於某種原因,我可以投票了你出色的答案:(但我沒有接受爲最佳答案 – html5 2011-04-29 06:10:41