2014-01-26 2 views
0

두 개의 표가 있습니다. 테이블 이름은 입니다.입니다. 항목 수와 함께 카테고리를 나열하고 싶습니다.재귀 범주 아래의 항목 수

카테고리 표 :

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 

그리고 : 인쇄 catname (ITEMCOUNT = 자신의 항목 수 + 하위 범주의 항목 수)

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

UPDATE : 당신이 범주 테이블의 전체 경로를 가지고 있기 때문에 SQLFIDDLE

답변

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과 일치하지 않습니다.

+0

감사합니다. 내게 정확한 결과가 주어진다. 고맙습니다! – maverabil

+0

문제가 있습니다. 카테고리 catname = C를 추가하면 C. 결과 C가 표시되지 않습니다. C 카테고리의 항목이없는 경우이 행을 제공하지 않습니다. – maverabil

+1

@maverabil. . . '왼쪽 외부 조인 (left outer join) '은 그 문제를 해결합니다. –

관련 문제