dongzi3434 2019-07-14 03:12
浏览 148
已采纳

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

I have a database table I have to build a UL list from

the table is setup like cat-id parent-id (is the cat-id of whatever the parent is) cat-name cat-image

I can get the root cat easily which has a parent-id of "0" but for the life of me I can't figure out how to do it so the end result is

rootcat --childParent ---child

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[] = $cat["cat-name"];
                    }
                }
            }
            mysqli_free_result($res);
            mysqli_close($con);
            return $cats;
        }
  • 写回答

2条回答 默认 最新

  • dougu1952 2019-07-14 05:37
    关注

    You can parse a sub category like this, but it does requirer to make a sql connection every time you check what categories does parent has:

    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;
                }
    

    That should give you the array:

    array(
        'cat1' => 'Some Category',
        'cat2' => array(
            'sub1' => 'name',
        ),
    );
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系