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 实现无限极分类的更多相关文章

  1. PHP无限极分类

      当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...

  2. PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂

    当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究.   到网上一搜php无限极分类,很多,但好多都是一 ...

  3. php之无限极分类

    首先建立分类信息表: CREATE TABLE IF NOT EXISTS `category` ( `categoryId` smallint(5) unsigned NOT NULL AUTO_I ...

  4. PHP无限极分类实现

    简单版的PHP生成无限极分类代码.其中包括了数据库设计.以及输出分类HTML代码. SQL代码 CREATE TABLE `district` ( `id` int(10) unsigned NOT ...

  5. PHP无限极分类详谈

    当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码 ...

  6. php不使用递归实现无限极分类

    无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...

  7. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  8. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  9. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

随机推荐

  1. Chirpy Zippy工具使用心得

    今天在网上看到MVC开发人员必备的工具中有一个工具叫Chirpy Zippy,可以把项目中的js文件自动压缩成min.js文件,于是就试了下这款工具.上到官网:http://chirpy.codepl ...

  2. java并发之synchronized详解

    前言 多个线程访问同一个类的synchronized方法时, 都是串行执行的 ! 就算有多个cpu也不例外 ! synchronized方法使用了类java的内置锁, 即锁住的是方法所属对象本身. 同 ...

  3. Django跨域问题(CORS错误)

    Django跨域问题(CORS错误) 一.出现跨域问题(cors错误)的原因 通常情况下,A网页访问B服务器资源时,不满足以下三个条件其一就是跨域访问 协议不同 端口不同 主机不同 二.Django解 ...

  4. Java学习笔记之Object常用方法

    Object:万类之祖   == : 比较的是是否是同一个对象,比较的是地址   equals: 是Object里面的方法,默认的是==,比较的是地址,但在String类型里重写为比较内容 一般我们在 ...

  5. DM7经常使用的命令汇总

    由于DM7兼容oracle ,所以当你不知道某个命令时,大抵就是可以参照oracle的命令及语法,当然有极少的情况会不一样.常用命令如下: 1.连接登录 disql SYSDBA/SYSDBA@223 ...

  6. 概念理解:boost::asio::io_service

    IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...

  7. python中eval的使用

    eval函数就是实现str与list.dict.tuple之间的转化栗子: a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" aa = eval( ...

  8. static self 区别与总结

    <?php /** * static self 区别与总结 * 总结: * 1.在 PHP 里,在没有继承时候,你用self::class 和 static::class是一样的,都是获取当前类 ...

  9. linux "No space left on device" 磁盘空间解决办法

    某年某月某日某时,某人在工作中设置crontab定时任务规则保存时,提示“No space left on device”,此时用df -h检查磁盘,发现还有剩余空间.请问是什么原因及如何排查?什么会 ...

  10. RabbitMQ通过DLX实现消息延迟接收

    1. 创建队列WorkQueue,并把WorkQueue跟exchangeWork绑定:2. 创建队列DLXQueue,并把DLXQueue跟exchangeDLX绑定:a. 设置DLXQueue队列 ...