mysql层次统计查询

morose999 2013-07-17 04:59:33
我有一个文章类别表,是用左右值实例树状的,现在只有二级:

id title lft rgt
1 类别一
2 小类别a
3 小类别b
4 类别二
5 小类别c
6 小类别d

有个文章表:
id title category_id
1 h 2
2 e 2
3 l 5
4 l 5
5 o 2
6 w 3
7 o 3
8 r 6

如何统计2个父类(类别一,类别二)及2个子类(小类别a,小类别b,c,d)各自的文章总数?想要的结果如下

title num
类别一 5
小类别a 3
小类别b 2
类别二 3
小类别c 2
小类别d 1
...全文
301 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
morose999 2013-07-18
  • 打赏
  • 举报
回复
2楼的思路我明白了,他这加了root的查询有点麻烦
morose999 2013-07-18
  • 打赏
  • 举报
回复


想得到的结果如图……把num的null填上……。
morose999 2013-07-18
  • 打赏
  • 举报
回复
本来想简单点说的……。

第一个表是这样的,zone表


他这个zone表是个左右值的小变种,他加了个root的字段,排序是按照root,lft来排的。这个跟查询应该关系不大,加多个where root=x就行。
zone表如有需要,可以添加parent_id字段,再不行加个path用来保存父到子的路径也行(,1,2,3,x...)

第二个表是这样的: agent



统计父地区及子地区的agent有多少个。
比如深圳(zone_id=2)的店有8个,广东的店(zone=1)有22个。
ACMAIN_CHM 2013-07-17
  • 打赏
  • 举报
回复
id title lft rgt 1 类别一 2 小类别a 3 小类别b 4 类别二 5 小类别c 6 小类别d 你是如何判断哪一行是大类,哪一行是小类的? 另外如休知道某一个是小类并且属于哪个大类?
rucypli 2013-07-17
  • 打赏
  • 举报
回复
select A.title,(case when A.lft is null then C.num when A.lft is not null and A.rgt is not null then select count(*) from B where category_id=A.lft or category_id=A.rgt) from A left join ( select category_id,count(*) as num from B group by category_id )C on A.id=C.category_id
rucypli 2013-07-17
  • 打赏
  • 举报
回复
第一个表应该这样吧 id title lft rgt 1 类别一 2 3 2 小类别a 3 小类别b 4 类别二 5 6 5 小类别c 6 小类别d

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧