2010-07-21 43 views
3

我希望能創造出我沒有一個想法,一個遞歸函數尚未遞歸函數類數據庫

這是我的代碼從數據庫

<?php 
    $sql = mysql_query("SELECT * FROM categories WHERE category_parent = '1' ORDER BY lft ASC"); 
    while($row = mysql_fetch_array($sql)) { 
    echo "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a>"; 
    $sql2 = mysql_query("SELECT * FROM categories WHERE category_parent = '{$row['category_id']}'"); 
    if(mysql_num_rows($sql2) > 0) 
    echo "<ul>"; 
    while($row2 = mysql_fetch_array($sql2)) { 
    echo "<li><a href='/{$row2['category_safe_name']}/'>{$row2['category_name']}</a><li>"; 
    } 
    if(mysql_num_rows($sql2) > 0) 
    echo "</ul>"; 
    echo "</li>"; 
    } 
    ?> 

目前獲取類這看起來像

Top Category (category_id = 1) 
    Category 
     Sub Category 

我的代碼適用於類別&子類別。我打算做的是讓我的代碼支持無限的子類別

歡迎任何幫助和建議。

謝謝

回答

3

一個想法,我會做:

<?php 
function getChildren($id=1) { 
    $sql = mysql_query("SELECT * FROM categories WHERE category_parent = '$id' ORDER BY lft ASC"); 
    echo "<ul>"; 
    while($row = mysql_fetch_array($sql)) { 
    echo "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a>"; 
    getChildren($row['category_id']); 
    echo "</li>"; 
    } 
    echo "</ul>"; 
} 

getChildren(); 
?> 
2

你應該看看Managing Hierarchical Data in MySQL

它很好地概述了在MySQL中使用分層數據的一些方法。

+0

我使用的是名爲pligg的開源應用程序 – damien 2010-07-21 14:55:12

+0

這是否意味着您無法控制模型?或...你在說什麼? – 2010-07-21 14:58:29

-1

是這樣的嗎?

function getCategories($mid, $categoryParent = 1) 
{ 
    $return = ''; 
    $results = mysql_query("SELECT * FROM categories WHERE category_parent = '$categoryParent' ORDER BY lft ASC", $mid); 
    while($row = mysql_fetch_array($results)) { 
     $return .= "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a></li>"; 
     $subs = getCategories($mid, $row['category_id']); 
     if (!empty($subs)) { 
      $return .= '<ul>'; 
      $return .= $subs; 
      $return .= '<ul>'; 
     } 
    } 
    return $return; 
} 

$mid = mysql_connect($host, $user, $pass); 
echo getCategories($mid); 

將打印出所有的類別,當然它固定到你確切想要的,但應該給你如何遞歸函數可以工作

0

你需要做的是建立一個遞歸函數。也就是說,一個自己調用的函數。例如:

function getCategories($parent=0) { 
    $res = mysql_query("SELECT * FROM categories WHERE category_parent = '$id' ORDER BY left ASC"); 
    if (mysql_num_rows($res) > 0) { 
     $category = mysql_fetch_object(); 
     echo '<ul>'; 
     echo '<li><a href="' . $category->category_safe_name . '">' . $category->category_name . '</a>'; 
     getCategories($category->category_id); 
     echo '</li>'; 
    } 
} 

如果我對錶名和列名做了任何拼寫錯誤,那麼顯然將它們換成正確的值。