递归函数类别数据库

时间:2010-07-21 14:43:00

标签: php mysql hierarchical-data

我希望创建一个我还没有想法的递归函数

这是我从数据库中获取类别的代码

  <?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

我的代码适用于类别&amp;子类别。我打算做的是让我的代码支持无限的子类别

欢迎任何帮助和建议。

谢谢

4 个答案:

答案 0 :(得分: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();
?>

答案 1 :(得分:2)

您应该查看Managing Hierarchical Data in MySQL

它很好地概述了在MySQL中使用分层数据的一些方法。

答案 2 :(得分: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>';
    }
}

如果我对表名和列名进行了任何拼写错误,那么显然要将它们换成正确的值。

答案 3 :(得分:-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);

会打印出你的所有类别,当然会按照你想要的方式修复它,但这会让你知道递归函数如何工作