php+mysql 实现无限极分类
php+mysql 实现无限极分类
<pre>
id name pid path
1 电脑 0 0
2 手机 0 0
3 笔记本 1 0-1
4 超级本 3 0-1-3
5 游戏本 3 0-1-3
</pre>
这种方式,假设我们要查询电脑下的所有后代分类,只需要一条sql语句:
<pre>
select id,name from category where path like ( select concat(path,'-',id,'%') path from category where id=1 );
</pre>
优点:查询容易,效率高,path字段可以加索引。
缺点:更新节点关系麻烦,需要更新所有后辈的path字段。
方案一的样例代码:
<pre>
<?php
$addrs = array(
array('id'=>1, 'name'=>'中国', 'pid'=>0),
array('id'=>2, 'name'=>'河南', 'pid'=>1),
array('id'=>3, 'name'=>'郑州', 'pid'=>2),
array('id'=>4, 'name'=>'洛阳', 'pid'=>2),
array('id'=>5, 'name'=>'安阳', 'pid'=>2),
array('id'=>6, 'name'=>'林州', 'pid'=>5),
array('id'=>7, 'name'=>'安阳县', 'pid'=>5),
array('id'=>8, 'name'=>'内黄', 'pid'=>5),
array('id'=>9, 'name'=>'滑县', 'pid'=>5),
array('id'=>10, 'name'=>'城郊乡', 'pid'=>6),
array('id'=>11, 'name'=>'湖南', 'pid'=>1),
array('id'=>12, 'name'=>'长沙', 'pid'=>11),
array('id'=>13, 'name'=>'湘潭', 'pid'=>11),
array('id'=>14, 'name'=>'岳麓区', 'pid'=>12),
);
// 查询子树(采用递归方法)
function get_childs($id)
{
global $addrs;
$ret = array();
foreach($addrs as &$addr) // 此处使用 & 运算符,提高效率
{
if($addr['pid'] == $id)
{
$addr['children'] = get_childs($addr['id']);
$ret[] = $addr;
}
}
return $ret;
}
// test code
echo '<pre>';
print_r( get_childs(1) );
echo '<hr/>';
print_r($addrs);
</pre>
php+mysql 实现无限极分类的更多相关文章
- PHP无限极分类
当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一 ...
- php之无限极分类
首先建立分类信息表: CREATE TABLE IF NOT EXISTS `category` ( `categoryId` smallint(5) unsigned NOT NULL AUTO_I ...
- PHP无限极分类实现
简单版的PHP生成无限极分类代码.其中包括了数据库设计.以及输出分类HTML代码. SQL代码 CREATE TABLE `district` ( `id` int(10) unsigned NOT ...
- PHP无限极分类详谈
当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码 ...
- php不使用递归实现无限极分类
无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
随机推荐
- asp.net core 3.0 中使用 swagger
asp.net core 3.0 中使用 swagger Intro 上次更新了 asp.net core 3.0 简单的记录了一下 swagger 的使用,那个项目的 api 比较简单,都是匿名接口 ...
- 从零开始搭建前端监控系统(三)——实现控制iframe前进后退
前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://gith ...
- Windows 7 SP1官方原版ISO系统镜像所有版本下载集合
========================================================================== Windows 7 With SP1 32位简体中 ...
- [USACO09JAN]安全出行Safe Travel 最短路,并查集
题目描述 Gremlins have infested the farm. These nasty, ugly fairy-like creatures thwart the cows as each ...
- 【Labview入门】工具的使用
labview版本:Labview2015 在你使用labview时你可能已经发现,在鼠标移动到连线上时,鼠标会自动的变化,其实这是你选择了自动识别的工具,然后鼠标会根据你所指示的东西自动切换工具类型 ...
- python方法是什么?
python方法是什么? 方法用来描述对象所具有的行为. 在类中定义的方法可以粗略分为四大类:公有方法.私有方法.静态方法.类方法. 公有方法.私有方法一般所指属于对象的实例方法, 私有方法的名字以两 ...
- python编程系列---可迭代对象,迭代器和生成器详解
一.三者在代码上的特征 1.有__iter__方法的对象就是可迭代类(对象) 2.有__iter__方法,__next()方法的对象就是迭代器3.生成器 == 函数+yield 生成器属于迭代器, 迭 ...
- PowerShell渗透--Empire(三)
会话注入 我们可以使用usemodule management/psinject模块来进程注入,获取权限 设置下Listeners和ProcID这2个参数,这里的ProcID就是之前的CMD的pid, ...
- Redis学习四(运维指南).
一.上线规划 一般 redis 的参数配置都在 redis.conf 中,在上线前根据实际环境配置好合适参数,能有效提高 redis 的可用性. redis 的运行机器 CPU 不求核数多,但求主频高 ...
- webpack 4.x 初级学习记录
首先声明下,本人不擅长文字表达,文采不行,所以文章中文字较少,请看代码,初级学习,不足之处请多多指教 GitHub链接 看云kancloud [TOC] webpack 4.x 安装 首先需要在全局中 ...