Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17740309
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

2008-04-15 17:24:04

看过各种各样的无限分类,在头昏眼花之际,突然觉悟——分类这东西,一旦分好,几乎就不改变了。也就是说在中,什么inset、update的操作很少发生,绝大部分都是select操作。既然这样的话,我们可以在添加修改的时候做多一些额外的事,让查询尽量简单。让查询简单的一种方法是把所有的子类紧挨着放在父类的下面。这样的话,数据表只需要一个用来在查询的时候排序的order和一个表示级别的level字段就足够完成分类功能了。假设表如下:
create table `class` ( `id` int (10) NOT NULL AUTO_INCREMENT , `order` int (11) , `level` int (5) , `other` varchar (100) , PRIMARY KEY ( `id` ) )

在每次添加分类时,如果加在最后面,order值就是表中最大的那个order+1,如果插在中间,order就是上一个分类的order+1,然后后面的所有分类的order+1。至于是子类父类,就看level值了,反正order比自己小并且level比自己小(level一般是越小级别越大,0表示顶级)的最接近自己的那个就是老爹。

至于查询嘛,查询所有的时候只要"select * from class order by `order`"就行了;
如果只查询其中一个类和他的所有子类的话,会比较麻烦一点点,首先要找出order比自己大level和自己相同的那个类的order号,假设等于nextorder吧,然后where order=selforder就找出来了,sql厉害的用子查询什么的也可以一下子找出来。

阅读(317) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~