递归类别下的项目数

时间:2014-01-26 20:17:46

标签: php mysql recursive-query

我有两张桌子。表格类别项目的名称。我想列出具有项目计数的类别。

类别表:

id | parent | catname | catpath
1    0        A         1
2    0        B         2
3    1        A1        1,3
4    3        A11       1,3,4
5    2        B1        2,5
6    0        C         6

...

表:

id | catid | title
1    1       title1
2    1       title2
3    3       title3
4    4       title4
5    4       title5
6    3       title6
7    5       title7

我想要这样的打印类别: print catname(itemcount =自己的项目数+子类别的项目数)

A (4)   /*<- sub category's item count + own item count*/
   A1 (1)
   A11 (2)
B (1)
   B1 (1)

更新: SQLFIDDLE

1 个答案:

答案 0 :(得分:1)

您可以这样做,因为您在类别表中拥有完整路径。荣誉。因此,您不需要递归查询:

select c.catname, count(ic.catid) as cnt
from categories c left outer join
     (select i.*, c.catname, c.catpath
      from items i join
           categories c
           on i.catid = c.id
     ) as ic
     on concat(ic.catpath, ',') like concat(c.catpath, ',%')
group by c.catname;

这使用like遍历层次结构。 ,的原因是1并不匹配10。