什么是 无限极分类???(PHP。数据库)

JavaScript014

什么是 无限极分类???(PHP。数据库),第1张

那是一种关联关系....sql 里可以叫"自连接" 假设:表 Category 有以下字段: Id(PK),Cate_Name(varchar),Cate_Parent_Id(int) 数据: Id(编号ID) Cate_Name(类别名称) Cate_Parent_Id(父级Id) 1 BaseCategory 0 2 News 1 3 Article 1 4 Story 3 说明: Id 为 1 的基类别(没有父级类别) News,Article 为 基类别下的子分类 Story 为 Article 下的子分类 层次关系: 0 - 2 - 3 - 4 这样就可以简单实现无限分类的数据库的设计了 使用: 给出Id 获取到它的父类别和所有子类别 Function getParentCategory($Id){ $sql = "select * from Category where Id = (select Cate_Parent_Id from Category where Id = $Id)"$rs = mysql_query($sql,$conn)...... //省事期间,给出伪代码吧 if(记录不存在 或者 $Id = 1){ return false//无父级或不存在 }else{ return 查询出的父级数据数组} } Function getChildCategory($PId){ $sql = "select * from Category where Cate_Parent_Id = $PId"存在则返回数据数组 否则返回false } 上面只是简单说明下大致思路.. php,J2ee的我没手写过,都是通过支持ORM的MVC框架去配置出来的. asp的倒是写过,需要的话,可以发你 只要逻辑关系整清楚了,就不难了...至于页面展示,可以用JS或者AJAX

 /**

     * 递归实现无限极分类

     * @param $array 分类数据

     * @param $pid 父ID

     * @param $level 分类级别

     * @return $list 分好类的数组 直接遍历即可 $level可以用来遍历缩进

     */

    function getTree($array, $pid =0, $level = 0){

        //声明静态数组,避免递归调用时,多次声明导致数组覆盖

        static $list = []        foreach ($array as $key => $value){            //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点

            if ($value['pid'] == $pid){                //父节点为根节点的节点,级别为0,也就是第一级

                $value['level'] = $level                //把数组放到list中

                $list[] = $value                //把这个节点从数组中移除,减少后续递归消耗

                unset($array[$key])                //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1

                getTree($array, $value['id'], $level+1)

            }

        }

问题太过笼统,给你一个无限极分类数据处理的一种解决方案吧

表结构

id int 主键

fid int 父级id, 顶级分类的fid设为0, 其它级别的分类的fid值为其父级分类的id

name char 分类名称

若是要显示整个分类列表,那么你读取整个表, 形成一个这样结构的数组

$list = array()

while( $row = mysql_fetch_assoc($ret) ){

if( !isset($list[$row['fid']]) ) $list[$ret['fid']] = array()

$list[$ret['fid']][$ret['id']] = $row

}

输出时用个递归就可以了, 把它转换成json,用js来做树形菜单那也很好控制

若是查某个分类下的子分类,那查询很简单,就不说了