无限分类谈得太多了,无非三种方法“路径”“左右值”“父id”,网上的讨论得比较多,具体实现就不再次讨论了。三种方法,各有优缺点。
“父id”的优点在于实现简单和移动节点简单,缺点在于查询麻烦,毕竟只能针对一层操作。
我想,对于“父id”这种无限分类的查询,多数人都是使用递归来实现了,性能自然不用说,分成n条sql去查询,对mysql的造成不少负载。
如果,仔细考虑下个递归过程,完全可以一次把数据查询出来,然后在程序里循环生成。
每次递归无非是查询一下当前id是否有子节点,然后子节点又递归下去,,也就是只要解决查询某个id是否有子节点就可以完成了。
解决这个问题的方法很简单,使用hash table来查询,键是parent_id值是分类集合,用php实现起来很简单。
假如,有分类如下
system --> linux
system --> unix
system --> windows
system --> windows -> qq
system --> windows -> msn
第一步,查询出所有数据
第二步,重组数据
循环一遍,根据父id集合数据
system => array(linux, unix, windows)
windows => array(qq, msn)
第三步,递归生成
这步,把查询sql改成查hash table。第二步里生成的集合,就是模拟查询的.根据parent_id在hash table里查询。
具体就不实现了,,做网盘的时候,目录我就是使用此方法,因同事不信一次查询能生成树,故写此blog。。
分享到:
相关推荐
PHP语言无限分类根据子id获取的父级的id代码,简单明了。
首先,无限级分类的核心在于每个分类都有一个父分类ID,通过这个字段可以构建层级关系。在SQL数据库中,我们可以创建一个包含以下字段的`categories`表: 1. `id`: 分类ID,主键,自增。 2. `name`: 分类名称。 3. ...
添加分类时,用户需要指定父分类,这可以通过选择器或者输入父分类ID来完成。修改分类可能涉及到更新`parent_id`或其他分类属性。删除分类则需要考虑到分类的子分类,通常会有一个确认过程以防止误删,并确保删除...
在这个"无限分类带数据库"的PHP实现中,它利用数据库存储分类数据,并且优化了查询效率,只读取一次数据库就能完成分类的构建。 首先,我们需要了解PHP中的无限分类实现原理。通常有两种主要方法:递归函数和层级...
无限分类通常基于树形结构,每个节点都有一个父节点(除了根节点),并且可以有任意数量的子节点。在数据库设计中,通常会用到自引用关联,即分类表中的一个字段(如`parent_id`)引用同一表的主键,表示当前分类的...
1. **构建无限分类数据结构**:首先,我们需要一个包含分类ID、父ID和分类名的数据源,通常来源于数据库查询。然后,我们可以通过比较每个分类的父ID与其它分类的ID,构建一个嵌套的关联数组,其中键是分类ID,值是...
无限分类通常基于自引用关联或层级标识符(如“路径”或“深度”)来实现。在这个例子中,可能使用了后者,即通过在数据库中为每个分类添加一个表示其在分类树中的位置的字段,如`parent_id`和`level`。`parent_id`...
文中提出的优雅解决方案是通过一次性查询所有分类,构建一个`id => pid`的关联数组,并将其缓存。然后,利用这个数组通过`while`循环不断查找上级分类,直到找到`pid`为0的顶级分类。这种方法避免了多次数据库查询,...
AjaxPro无限级分类联动是一种基于Ajax技术和JavaScript的交互式网页设计模式,主要用于构建动态、无需刷新页面即可更新内容的级联菜单系统。这种技术在网站的导航、商品分类或者层级结构展示等方面非常实用,能够...
为了提高查询效率,可以使用预加载或关联查询(如Eloquent ORM的`with('children')`)一次性获取所有分类及其子分类。此外,可以使用`LEFT JOIN`查询,避免因递归导致的多次数据库访问。 5. **动态级联效果** 在...
一个常见的设计是使用一个名为`categories`的表,包含字段如`id`(主键,唯一标识每个分类)、`name`(分类名称)、`parent_id`(父分类ID,用于表示分类层级关系)。当`parent_id`为0时,表示顶级分类;非0时,表示...
1. 数据结构:首先,我们需要定义一个数据结构来存储分类信息,这通常是一个对象数组,每个对象包含分类的ID、名称、父分类ID等属性,以及可能的子分类数组。 2. 递归处理:在JavaScript中,递归函数是构建无限级...
无限级分类的核心思想是递归或者自关联,通过数据库中的父ID字段来判断一个分类是否为另一个分类的子分类。在"class.asp"文件中,很可能包含了实现这种分类逻辑的函数或类。这类代码通常会包含以下关键部分: 1. ...
无限分类通常基于树状结构,每个节点都可以有任意数量的子节点,形成一个无限级别的分类层次。在数据库设计中,常见的实现方法有两种:使用自引用字段(self-referential)或使用路径枚举法(Path Enumeration)。自...
例如,在一个社交网络平台中,我们可以使用无限上级查询来查询某个用户的所有上级信息,并使用无限下级查询来查询某个用户的所有下级信息。 结论 无限上级、无限下级查询是 PHP 中的一种常见查询方式,广泛应用于...
3. 查询分类:可以通过比较左右值来获取指定范围内的所有子分类,或者查找某个节点的父节点、子节点、同级节点等。 4. 遍历分类:可以按照左值从小到大的顺序遍历整个分类树,实现层次结构的展示。 左右值法的优势...
- 数据库设计:通常需要一个包含`id`(主键)、`parent_id`(父分类ID)、`name`(分类名称)等字段的分类表。有时为了提高查询效率,还会添加额外的字段,如`path`(分类路径)或`level`(层级深度)。 - 查询优化...
1. **获取全部分类**:函数可能能一次性返回所有的分类,包括它们的层级关系。 2. **按层级遍历**:能够按照层级顺序逐级展示分类,这对于构建多级导航菜单非常有用。 3. **根据父类别获取子类别**:可以根据指定的...
2. **数据库设计**:在`test.sql`中,通常会创建一个如`categories`的表,包含`id`(主键)、`name`(分类名)、`parent_id`(父分类ID)和`level`(层级)等字段。`parent_id`字段用于建立父子关系,`level`字段则...
对于无限级分类,通常会使用自引用的关联表,其中每个分类都有一个父分类ID字段,表示其上级分类。这样,通过递归查询或自连接查询,我们可以获取到任意级别的子分类。 文件`addshangpinlei.php`可能是一个用于添加...