一级分类表a
cid,name
二级分类表b
sid,name,cid(一级分类表中的cid)
三级分类c
id,name,sid(二级分类表中的sid)现在需要取得一级分类的cid,name,及统计有多少的所属二级分类和三级分类请各位指点下,谢谢

解决方案 »

  1.   

    贴记录及要求结果出来看看
    select a.cid,a.name,count(b.sid),count(c.id)
    from 一级分类表 a left join 二级分类表 b on a.cid=b.cid
    left join 三级分类 c on b.sid=c.sid
      

  2.   

    a 表
    cid,name
    1 ,baidu
    2 ,google
    b 表
    sid,name,    cid(一级分类表中的cid) 
    1, tb.baidu  ,1
    2, ta.baidu  ,1
    3, te.google ,2
    4, tq.google ,2
    c 表
    id,name,sid(二级分类表中的sid) 
    1, aa,  1
    2, bb,  1
    3, cc,  2
    4, dd,  3
    4, tt,  4
    5, qq,  4
    6, ww,  4要得到的结果
    1 ,baidu,2(二级分类数),3(三级分类数)
    2 ,google,3 (二级分类数), 4(三级分类数)
      

  3.   

    select a.*,count(distinct b.sid),count(c.id)
    from a left join b on a.cid=b.cid
    left join c on b.sid=c.sid
    可以创建,但仅是书写方便,不会有什么效率上的提高。
      

  4.   

    select a.cid,a.name,count(b.sid),count(c.id) 
    from 一级分类表 a left join 二级分类表 b on a.cid=b.cid 
    left join 三级分类 c on b.sid=c.sid group by a.cid,a.name
      

  5.   

    楼主啊,你提供的数据似乎不对吧。建议提供的数据自己先测试一下。mysql> select * from a;
    +-----+--------+
    | cid | name   |
    +-----+--------+
    |   1 | baidu  |
    |   2 | google |
    +-----+--------+
    2 rows in set (0.00 sec)mysql> select * from b;
    +-----+-----------+------+
    | sid | name      | cid  |
    +-----+-----------+------+
    |   1 | tb.baidu  |    1 |
    |   2 | ta.baidu  |    1 |
    |   3 | te.google |    2 |
    |   4 | tq.google |    2 |
    +-----+-----------+------+
    4 rows in set (0.00 sec)mysql> select * from c;
    +----+------+------+
    | id | name | sid  |
    +----+------+------+
    |  1 | aa   |    1 |
    |  2 | bb   |    1 |
    |  3 | cc   |    2 |
    |  4 | dd   |    3 |
    |  5 | qq   |    4 |
    |  6 | ww   |    4 |
    | 41 | tt   |    4 |
    +----+------+------+
    7 rows in set (0.00 sec)mysql>mysql> select a.cid,a.name,count(distinct b.sid),count(c.id)
        -> from a left join b on a.cid=b.cid
        ->     left join c on b.sid=c.sid
        -> group by a.cid,a.name;
    +-----+--------+-----------------------+-------------+
    | cid | name   | count(distinct b.sid) | count(c.id) |
    +-----+--------+-----------------------+-------------+
    |   1 | baidu  |                     2 |           3 |
    |   2 | google |                     2 |           4 |
    +-----+--------+-----------------------+-------------+
    2 rows in set (0.01 sec)mysql>