从数据库获取分层数据

3

你好,我有一个问题可能很蠢。但是也许不是。 在数据库中,我有一个名为categories的表,并且我有4列ID、parent_id、title和description。 Parent_id是当前类别的子级。

Id |  parent_id |  title  |  description

___________________________________________________

1  |     1      | Main Category | description 


2  |     1      | Sub Category  | description 


3  |     2      | Other Category | description 

4  |     1      | Some Category | description 

好的,我知道如何输入数据和显示结果;这不是问题。当我在表格中显示结果时

<table>
   <tr>
        <td> Id </td>
        <td> Parent </td>
        <td> Title </td>
        <td> Desc </td>
   </tr>
    <?php foreach($categories as $category): ?>
    <tr>
       <td> <?php echo $category->id; ?> </td>
       <td> <?php echo $category->parent_id; ?> </td>
       <td> <?php echo $category->title; ?> </td>
       <td> <?php echo $category->eescription; ?> </td>
   </tr>
   <?php endforeach;?>
</table>

这很好用,可以在其他父类别下显示子类别:表格如下所示:
1  |     1      | Main Category | description 
2  |     1      | Sub Category  | description   
3  |     2      | Other Category | description    
4  |     1      | Some Category | description 

我的问题是如何列出所有类别和子类别,就像这样
    |-- Main Category
       |--- Sub Category 
           |--- One more cat  

   |--Other Category   
      |--- Some Category

像这样 enter image description here

使用forach()是否可以获取此数据? 有没有示例如何做到这一点。

谢谢

2个回答

2

告诉我,我从网站上理解了一个教程。但是我很困惑,因为他说根类别为空。我必须为该列设置什么数据库列类型?我的类型是INT,当为空时默认值为0。在教程中,他说必须为空。 - Jony
父级字段必须在顶部为空。通常没有人使用顶级类别。它是一种抽象的父级,从那里开始创建目录/类别导航。 - Eugene
@ Eugene 我理解教程,但他们直接给出了左右值。我在将节点作为子节点或父节点添加时如何知道左右值。 - Nagesh Katke

1

我正在做这个。使用Codeigniter框架进行开发。如果有需要,我会发布如何修复此问题的截图。

只需简单地创建模型:

模型

   /*
    * Get all children categories
    * 
    * Get Hierarchical Data from Categories
    * 
    * @ikac
    */

   public function fetchChildren($parent, $level) {


       $this->handler = $this->db->query("SELECT * FROM content_categories WHERE parent='".$parent."' ");


          foreach($this->handler->result() as $row) {
             echo str_repeat('&nbsp; &nbsp; &nbsp; &nbsp; |-----', $level).$row->title .'<br>';

             $this->fetchChildren($row->title, $level+1);
          }

   }

}

你会得到类似的输出

Default
     |-----Sub Category
     |-----Test Category 1
           |-----Seccond Test Category 1

谢谢@Eugene


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接