php web开发之分类设计
分类是每个网站必不可少的表的,本次讲的分类设计,并不是无限分类是根据自己的需求可以设置分类的嵌套层数。并且支持一条sql读取属于某个分类的所有子分类
首先看看表的设计:
create table category ( id smallint(10) not null auto_increment primary key, name varchar(50) not null, depath tinyint(1) default 0, prefix binary(16) not null, #此处是关键,后面说明 description varchar(100) not null default "", countrs int(11) not null default 0, index(prefix)) engine = myisam alter table category add unique index id
表建立好后。关键是在添加和删除的时候做一点点算法
首先看看 0100000000000000 第一个,第二个 02000... 03 ...FF 能表示255个分类,相信一般的网站一层255分类足够使用了。
第二层表示成 0101000000000000 这个表示01下第一层的第一个,其他可以表示成为 0102....01FF
第三层0101010000000000 ..... 0101FF0000000000
从上面来看binary 长度为16也就是只能表示16/2层
1、如何查询某个分类下面的所有分类呢?
select * from category where prefix>0100000000000000 and prefix<0200000000000000
2、获取当前分类的路径
比方说一个分类010F0F0F00000000
那么首先通过程序分解成
A= 0100000000000000
B= 010F000000000000
C= 010F0F0000000000
D= 010F0F0F00000000
select * from category where prefix = A and prefix = B and prefix = C and prefix = D
这样就取得路径
3、关于统计
在某个分类添加内容的时候更新最底层的category countrs 累加1
如你有什么看法和建议欢迎一起探讨