下载了一个程序,里面有一个可无限分别的类别表。结构大致如下:category(主要为乐器类别)
 id     catname    pid    level
 10     string      0        1     (说明:id默认从10开始递增,弦类,根类为0,级别1)
 11     drum        0        1
 12     wind        0        1
... ...
1010    guitar     10        2     (说明:id由父id乘100+递增10,吉他,pid为父类id,级别2)
1011    banjo      10        21210    saxophone  12        2
... ...
101010  classical  1010      3     (说明:id由父id乘100+递增10,古典吉他,pid为父类id,级别3)
101011  electric   1010      3
101012  bass       1010      3product(各类别下的不同型号、尺寸具体产品)
id catid proname ...问题是,部分二级分类无三级分类,直接就是产品,有的则分成更细的三级类别,如果我要搜索属于弦类,或鼓类这些根类下的所有产品,如何用sql查询?
如果全部是二级可以用 select * from category inner join product on category.id = product.catid where category.pid = '$id'
但这样对有三级的无效,该怎么办?

解决方案 »

  1.   

    select * from category inner join product on category.id = product.catid where category.pid = '$id' or (category.pid in (select id from category where pic='$id'))不过最好写个函数,取根分类的所有类别ID,简化sql语句
      

  2.   

    select * from category inner join product on category.id = product.catid where category.pid = '$id' or (category.pid in (select id from category where pid='$id'))不好意思,上句中最后的pid写成pic了
      

  3.   

    select * from product p
    left join category c on
    c.id = p.catid and c.id like CONCAT((select id from category where catname ='$catname'),'%');