2张表:
表一:类别表,可以无限分类,三个字段:id,父id,名称,数据类似下面的分类ID   PAR_ID  NAME1     0       机械
2     0       橡胶
3     1       塑料机械
4     1       模具机械
5     2       成品橡胶
6     2       非成品橡胶
7     3       硬塑料机械
8     3       软塑料机械
9     7       大型硬塑料机械
10    7       小型硬塑料机械
11    8       大型软塑料机械
   表二:产品表,存放具体的产品,三个字段,id,所属分类Id,产品名称,所有的产品的类型都是最小的分类;id      name        typeId
1       大硬机械1     9      
2       大硬机械2     9
3       小硬机械1     10
4       大软机械1     11   
5       成品橡胶1      5
6       成品橡胶2      5
问题:
我现在要根据分类得到该分类的下的所有产品,包括子类别的产品;
比如:我要找机械(这个类别的id:1是我的条件)的产品,我可以得到4个产品,id:1,2,3,4
      我要得到塑料机械(这个类别的id:3是我的条件)的产品,我可以得到四个产品,id:1,2,3,4
      我要得到硬塑料机械(这个类别的id:7是我的条件)的产品,我可以得到三个产品,id:1,2,3
      我要得到软塑料机械(这个类别的id:8是我的条件)的产品,我可以得到一个产品,id:4类似上面的,就是说当我选择某个分类的时候,我要得到该类别下面所有的产品,包括子类别的产品(其实要得到产品,一定要到最小的类别,因为产品只能存放在最小的分类下面)  现在我只有一个条件,就是我可以我想要得分类的id,比如我可以知道机械的id,或者塑料机械的id
等,现在我如何根据这个条件得到我想要得产品 ;
      
      

解决方案 »

  1.   

    select * from 产品 where 类别ID=1
      

  2.   

    这明显是个递归嘛,分类就是结点,产品就是叶子。简单的sql我看是不行的。用存储过程或程序来写吧,效率是低点。
      

  3.   

    谢谢小龙,现在我也感到用简单的sql不能解决问题,如果用存储过程,该如何去实现的
      

  4.   

    强烈建议你重新设计你的表结构,表结构设计的好,你的sql就简单多了