一级分类表a
cid,name
二级分类表b
sid,name,cid(一级分类表中的cid)
三级分类c
id,name,sid(二级分类表中的sid)现在需要取得一级分类的cid,name,及统计有多少的所属二级分类和三级分类请各位指点下,谢谢
cid,name
二级分类表b
sid,name,cid(一级分类表中的cid)
三级分类c
id,name,sid(二级分类表中的sid)现在需要取得一级分类的cid,name,及统计有多少的所属二级分类和三级分类请各位指点下,谢谢
调试欢乐多
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
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(三级分类数)
from a left join b on a.cid=b.cid
left join c on b.sid=c.sid
可以创建,但仅是书写方便,不会有什么效率上的提高。
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 |
+-----+--------+
| 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>