Php 递归数据库查询以构建ul列表

Php 递归数据库查询以构建ul列表,php,parent-child,Php,Parent Child,我有一个数据库表,我必须建立一个UL列表 这张桌子是这样布置的 猫id 父id(无论父id是什么,都是cat id) 猫名 猫的形象 我可以轻松获取父id为“0”的根cat 但就我的一生而言,我不知道该怎么做,所以最终的结果是 根猫 --亲子 ---孩子 函数cats(){ $sql=“从“猫”中选择*; $cats; $con=mysqli_connect($this->vars[“host”]、$this->vars[“user”]、$this->vars[“pass”]、$this->va

我有一个数据库表,我必须建立一个UL列表

这张桌子是这样布置的 猫id 父id(无论父id是什么,都是cat id) 猫名 猫的形象

我可以轻松获取父id为“0”的根cat 但就我的一生而言,我不知道该怎么做,所以最终的结果是

根猫 --亲子 ---孩子

函数cats(){
$sql=“从“猫”中选择*;
$cats;
$con=mysqli_connect($this->vars[“host”]、$this->vars[“user”]、$this->vars[“pass”]、$this->vars[“db”]);
if(mysqli\u connect\u errno()){
打印“启动MYSQLI错误
”。 mysqli_connect_error()。 “
ENDMYSQLI错误”; }否则{ $res=mysqli\u查询($con,$sql); 如果(mysqli_num_行($res)>0){ 而($cat=$res->fetch_数组(MYSQLI_ASSOC)){ 如果($cat[“父id”]=“0”){ $cats[]=$cat[“cat name”]; } } } mysqli_免费_结果($res); mysqli_close($con); 返回$cats; }
您可以像这样解析子类别,但每次检查父类别时都需要建立sql连接:

function cats(){
    $sql = "SELECT * FROM `cats";
    $cats;
    $con = mysqli_connect($this->vars["host"], $this->vars["user"], $this->vars["pass"], $this->vars["db"]);
    if(mysqli_connect_errno()){
        print "START MYSQLI ERROR<br/>".
        mysqli_connect_error() .
        "<br/>ENDMYSQLI ERROR";
    }else{
        $res = mysqli_query($con, $sql);
        if(mysqli_num_rows($res) > 0){
            while($cat = $res->fetch_array(MYSQLI_ASSOC)){
                if($cat["parent-id"] == "0"){
                    $cats[$key] = $cat["cat-name"];
                    $sql_subCategory = "SELECT * FROM cats where parent_id=". $cat["id"];
                            $res_sub = mysqli_query($con, $sql_subCategory);
                            if(mysqli_num_rows($res_sub) > 0){
                                while($cat_sub = $res_sub->fetch_array(MYSQLI_ASSOC)){
                                   $cats[$cat["cat-name"]] = $cat_sub["cat-name"];
                                }
                            }
                        }
                    }
                }
                mysqli_free_result($res_sub);
                mysqli_free_result($res);
                mysqli_close($con);
                return $cats;
            }

您可以像这样解析子类别,但每次检查父类别时都需要建立sql连接:

function cats(){
    $sql = "SELECT * FROM `cats";
    $cats;
    $con = mysqli_connect($this->vars["host"], $this->vars["user"], $this->vars["pass"], $this->vars["db"]);
    if(mysqli_connect_errno()){
        print "START MYSQLI ERROR<br/>".
        mysqli_connect_error() .
        "<br/>ENDMYSQLI ERROR";
    }else{
        $res = mysqli_query($con, $sql);
        if(mysqli_num_rows($res) > 0){
            while($cat = $res->fetch_array(MYSQLI_ASSOC)){
                if($cat["parent-id"] == "0"){
                    $cats[$key] = $cat["cat-name"];
                    $sql_subCategory = "SELECT * FROM cats where parent_id=". $cat["id"];
                            $res_sub = mysqli_query($con, $sql_subCategory);
                            if(mysqli_num_rows($res_sub) > 0){
                                while($cat_sub = $res_sub->fetch_array(MYSQLI_ASSOC)){
                                   $cats[$cat["cat-name"]] = $cat_sub["cat-name"];
                                }
                            }
                        }
                    }
                }
                mysqli_free_result($res_sub);
                mysqli_free_result($res);
                mysqli_close($con);
                return $cats;
            }

这是我结束的,完全是递归的

    public function cats($id){      
    $con = mysqli_connect($this->vars["host"], $this->vars["user"], $this->vars["pass"], $this->vars["db"]);
    $cats;
    if(mysqli_connect_errno()){
        print "START MYSQLI ERROR<br/>".
        mysqli_connect_error() .
        "<br/>ENDMYSQLI ERROR";
    }else{
        $cats[] = $this->child($id, $con);
        mysqli_close($con);
        return $cats;
    }
}
function child($id,$con){
    $sql = "SELECT * FROM `cats` WHERE `parent-id`= '".$id."'";
//  print $sql ."<br/>";
    $res = mysqli_query($con, $sql);
        if(mysqli_num_rows($res) > 0){
            while($cat = $res->fetch_array(MYSQLI_ASSOC)){ 
                    $cats[]["cat-name"] = $cat["cat-name"];
                    $sql_subCat = "SELECT * FROM `cats` WHERE `parent-id` = '".$cat["cat-id"]."'";
                    $res_sub = mysqli_query($con, $sql_subCat);
                    if(mysqli_num_rows($res_sub) > 0){
                        while($cat_sub = $res_sub->fetch_array(MYSQLI_ASSOC)){
                            $cats[$cat["cat-name"]][] = $cat_sub["cat-name"] ;
                            $cats[$cat["cat-name"]]= $this->child($cat["cat-id"],$con);
                        }
                    }
                }

        }
        mysqli_free_result($res_sub);
        mysqli_free_result($res);
        return $cats;
}
公共功能猫($id){
$con=mysqli_connect($this->vars[“host”]、$this->vars[“user”]、$this->vars[“pass”]、$this->vars[“db”]);
$cats;
if(mysqli\u connect\u errno()){
打印“启动MYSQLI错误
”。 mysqli_connect_error()。 “
ENDMYSQLI错误”; }否则{ $cats[]=$this->child($id,$con); mysqli_close($con); 返回$cats; } } 函数子项($id,$con){ $sql=“从'cats'中选择*,其中'parent id`='”$id.“”; //打印$sql。“
”; $res=mysqli\u查询($con,$sql); 如果(mysqli_num_行($res)>0){ 而($cat=$res->fetch_数组(MYSQLI_ASSOC)){ $cats[][“cat name”]=$cat[“cat name”]; $sql_subCat=“从'cats'中选择*,其中'parent id`='”$cat[“cat id”]。”; $res\u sub=mysqli\u查询($con,$sql\u subCat); 如果(mysqli_num_行($res_sub)>0){ 而($cat\u sub=$res\u sub->fetch\u数组(MYSQLI\u ASSOC)){ $cats[$cat[“cat name”][]=$cat_sub[“cat name”]; $cats[$cat[“cat name”]=$this->child($cat[“cat id”],$con); } } } } mysqli_免费_结果($res_sub); mysqli_免费_结果($res); 返回$cats; }
这是我最后说的,完全是递归的

    public function cats($id){      
    $con = mysqli_connect($this->vars["host"], $this->vars["user"], $this->vars["pass"], $this->vars["db"]);
    $cats;
    if(mysqli_connect_errno()){
        print "START MYSQLI ERROR<br/>".
        mysqli_connect_error() .
        "<br/>ENDMYSQLI ERROR";
    }else{
        $cats[] = $this->child($id, $con);
        mysqli_close($con);
        return $cats;
    }
}
function child($id,$con){
    $sql = "SELECT * FROM `cats` WHERE `parent-id`= '".$id."'";
//  print $sql ."<br/>";
    $res = mysqli_query($con, $sql);
        if(mysqli_num_rows($res) > 0){
            while($cat = $res->fetch_array(MYSQLI_ASSOC)){ 
                    $cats[]["cat-name"] = $cat["cat-name"];
                    $sql_subCat = "SELECT * FROM `cats` WHERE `parent-id` = '".$cat["cat-id"]."'";
                    $res_sub = mysqli_query($con, $sql_subCat);
                    if(mysqli_num_rows($res_sub) > 0){
                        while($cat_sub = $res_sub->fetch_array(MYSQLI_ASSOC)){
                            $cats[$cat["cat-name"]][] = $cat_sub["cat-name"] ;
                            $cats[$cat["cat-name"]]= $this->child($cat["cat-id"],$con);
                        }
                    }
                }

        }
        mysqli_free_result($res_sub);
        mysqli_free_result($res);
        return $cats;
}
公共功能猫($id){
$con=mysqli_connect($this->vars[“host”]、$this->vars[“user”]、$this->vars[“pass”]、$this->vars[“db”]);
$cats;
if(mysqli\u connect\u errno()){
打印“启动MYSQLI错误
”。 mysqli_connect_error()。 “
ENDMYSQLI错误”; }否则{ $cats[]=$this->child($id,$con); mysqli_close($con); 返回$cats; } } 函数子项($id,$con){ $sql=“从'cats'中选择*,其中'parent id`='”$id.“”; //打印$sql。“
”; $res=mysqli\u查询($con,$sql); 如果(mysqli_num_行($res)>0){ 而($cat=$res->fetch_数组(MYSQLI_ASSOC)){ $cats[][“cat name”]=$cat[“cat name”]; $sql_subCat=“从'cats'中选择*,其中'parent id`='”$cat[“cat id”]。”; $res\u sub=mysqli\u查询($con,$sql\u subCat); 如果(mysqli_num_行($res_sub)>0){ 而($cat\u sub=$res\u sub->fetch\u数组(MYSQLI\u ASSOC)){ $cats[$cat[“cat name”][]=$cat_sub[“cat name”]; $cats[$cat[“cat name”]=$this->child($cat[“cat id”],$con); } } } } mysqli_免费_结果($res_sub); mysqli_免费_结果($res); 返回$cats; }
您要实现什么输出数组?同时显示您的类别表结构以及您要实现什么输出数组?同时显示您的类别表结构