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

如你有什么看法和建议欢迎一起探讨

原文地址:https://www.cnblogs.com/mklp98999/p/3396746.html