Php 递归函数类别数据库

Php 递归函数类别数据库,php,mysql,hierarchical-data,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']}/'>{

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

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

  <?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>";
  }
  ?>
我的代码适用于类别和子类别。我计划做的是使我的代码支持无限的子类别

欢迎任何帮助和建议

谢谢你

你应该看看

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

类似的内容

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);
函数getCategories($mid,$categoryParent=1) { $return=''; $results=mysql_query(“从类别中选择*,其中类别_parent='$categoryParent'按lft ASC排序,$mid”); while($row=mysql\u fetch\u数组($results)){ $return.=“
  • ”; $subs=getCategories($mid,$row['category_id']); 如果(!空($subs)){ $return.='
      '; $return.=$subs; $return.='
        '; } } return$return; } $mid=mysql\u connect($host、$user、$pass); 回音分类($中); 会打印出所有类别,当然会按照您想要的方式进行修复,但这会让您了解递归函数的工作方式

        我会这样做:

        <?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();
        ?>
        

        您需要做的是构建一个递归函数。也就是说,一个在内部调用自身的函数。例如:

        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>';
            }
        }
        
        函数getCategories($parent=0){ $res=mysql_query(“从类别中选择*,其中类别_父项='$id'按左ASC排序”); 如果(mysql_num_rows($res)>0){ $category=mysql_fetch_object(); 回声“
          ”; 回音“
        • ”; 获取类别($category->category\u id); 回音“
        • ”; } }
          如果我在表名和列名方面有任何输入错误,那么很明显,我会将它们替换为正确的值。

          我使用的是名为pligg的开源应用程序,这是否意味着您无法控制模型?或你在说什么?
          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>';
              }
          }