문제

내 문제에 대한 도움을 주셔서 감사합니다.

2 개의 MySQL 테이블, 카테고리 및 게시물이 있습니다.

카테고리:

catid- 이름 - 부모 _id

게시물:

PID- 이름 - 카테고리

내가하고 싶은 것은 하위 범주의 게시물을 포함하여 각 범주에 대한 총 게시물을 얻는 것입니다.

지금은 다음을 통해 각 (최상위) 카테고리 (그러나 하위 범주가 아님)에서 총 게시물 수를 받고 있습니다.

"SELECT c.*, COUNT(p.PID) as postCount 
        FROM categories AS c LEFT JOIN posts AS p 
        ON (c.CATID = p.category) 
        WHERE c.parent='0' GROUP BY c.CATID ORDER BY c.name ASC"; 

질문은 다시 한 번, 각 관련 하위 범주에 대한 총계를 포함하여 각 범주의 합계를 어떻게 얻을 수 있습니까?

기존 시스템을 유지하고 있기 때문에 데이터베이스를 중첩 세트 형식으로 구조 조정하는 것은 불가능합니다.

당신의 도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

카테고리가 무한히 중첩되지 않으면 한 번에 한 레벨에 가입 할 수 있습니다. 다음은 최대 3 단계의 중첩에 대한 예입니다.

SELECT c.name, COUNT(DISTINCT p.PID) as postCount 
FROM categories AS c 
LEFT JOIN categories AS c2
    ON c2.parent = c.catid
LEFT JOIN categories AS c3
    ON c3.parent = c2.catid
LEFT JOIN posts AS p 
    ON c.CATID = p.category
    OR c2.CATID = p.category
    OR c3.CATID = p.category
WHERE c.parent = '0' 
GROUP BY c.CATID, c.name
ORDER BY c.name ASC

다른 팁

롤업 연산자를보고 싶다고 생각합니다. 나는 이것이 당신이 원하는 것을 얻을 것이라고 믿습니다.

http://msdn.microsoft.com/en-us/library/ms189305(sql.90).aspx

랜디

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top