zoukankan      html  css  js  c++  java
  • 【php】php不用递归完成无限分类,从表设计入手完整演示过程

    无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图

    网上无限分类大多不全面,今天我会从设计表开始,

    首先我们先做视图界面,

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>白超华-博客园</title>
    </head>
    <body>
        <form action="" method="post">
            分类名称 <input type="text" name="cat_name" value=""><br><br>
            上级分类 <select name="cat_root">
                         <option value="">顶级分类</option>
                     </select>
                     <input type="submit">
        </form>
    </body>
    </html>

    网页展示如下:

    我们首先来设计表,(需要实验的朋友直接复制SQL语句到cmd执行即可)

    #创建数据库
    CREATE DATABASE tree;
    #选择数据库
    USE tree;
    #创建表
    CREATE TABLE tree(
        cat_id smallint UNSIGNED AUTO_INCREMENT comment '类别ID',
        cat_name varchar(10) NOT NULL comment '类别名称',
        parent_id smallint NOT NULL DEFAULT 0 comment '类别父ID',
        path varchar(20) NOT NULL comment '路劲结构',
        PRIMARY KEY(cat_id)
    )engine=MyISAM charset=utf8;

    表结构如下:

    其中字段 path 就是不用递归操作的重点,path用来表示下级分类深入的情况,啊哈用语言还不是很好描述,举个简单例子吧,理解的朋友就直接跳过了!

    path是通过字符串存储的形式来表示类别之间的层关系,通过字符串函数我们可以知道path中 ' - ' 的数量,如果有一个表示它上面有一个父分类,

    如果有两个表示它上面有两个父分类.以此类推实现无限分类。

    通过表单获取的类别id和父id可以得到路径path,我们需要写一个函数来获取path,就是先插入这条数据,然后根据这条数据的id,pid制作除path然后更新到这条记录,

    不使用递归的方法就是在插入path的时候需要制作一个path路径。

    php代码如下:

    <?php
    header("Content-Type:text/html;charset=utf8");
    require './Mysql.class.php';//引入数据库操作类
    
    $db = new Mysql();            //连接数据库
    
    //从数据表中获取数据用来显示到 select 下拉菜单.
    $sql = "SELECT * FROM tree";
    $result = $db->getAll($sql);
    
    //接受表单数据
    if(!empty($_POST['cat_name'])){
    
        $cat_name = trim($_POST['cat_name']);
        $parent_id = isset($_POST['parent_cat']) ? $_POST['parent_cat'] : 0;
    
        $sql2 = "SELECT cat_id FROM tree WHERE parent_id = $parent_id";    
        $cat_id = $db->getOne($sql2);    
        $path = path($parent_id,$cat_id);
    
    //数据入库
        $sql = "INSERT INTO tree (cat_name,parent_id,path) values('$cat_name',$parent_id,$path)";
        if($db->query($sql)) echo "插入成功";
    
        foreach($result as $row){
            $sun = substr_count($row['path'], '-');
            if($num > 0){
                $pre = str_repeat('-',$sum);
            }else {
                $row['tree'] = $pre.$row['name'];
            }
            $str.=$row['tree'].'br';
        }
        echo $str;
    }
    include './tree.html';        //引入视图文件

    可以自己定义输出样式

     

  • 相关阅读:
    第六次作业--结对编程第二次
    第四次作业——项目选题报告
    第五次作业——结对
    第三次作业——团队项目展示
    第二次作业——个人项目实战
    第一次作业-准备
    码农开富农,锄头得先拿
    一个关于狗记录的Java练习
    一个随手练的题目后面再弄一个带面版的
    java拓荒者
  • 原文地址:https://www.cnblogs.com/bc8web/p/5714623.html
Copyright © 2011-2022 走看看