码迷,mamicode.com
首页 > Web开发 > 详细

php不用递归完成无限分类,从表设计入手完整演示过程

时间:2016-07-28 16:17:07      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:

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

技术分享

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

首先我们先做视图界面,

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

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;        //引入视图文件

可以自己定义输出样式

 

php不用递归完成无限分类,从表设计入手完整演示过程

标签:

原文地址:http://www.cnblogs.com/bc8web/p/5714623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!