2011-10-12 5 views
1

나는 카테고리 테이블과 제품 테이블을 가지고있다. 제품에는 category_id 및 maker_id가 있습니다.MySQL 그룹핑 하위 쿼리

범주 이름의 테이블을 반환하고 카테고리에 주어진 $ maker_id (PHP 코드에 정의 된대로)에 속하는 제품이 범주에 포함되어 있는지 여부를 Binary로 반환하려고합니다.

현재의 방법은 각 카테고리에 얼마나 많은 일치하는 제품이 있는지 계산하지만 예/아니오 만 필요하므로 더 빠른 방법이 있다고 가정합니다. 현재 코드 :

SELECT 
    c.name, 
    SUM(CASE WHEN p.maker_id = '{$maker_id}' THEN 1 ELSE 0 END) AS already_used 
FROM categories c 
LEFT JOIN products p ON p.category_id = c.id 
GROUP BY c.id 

EXISTS를 사용하면서 계속 읽었지만 찾은 모든 예는 WHERE 절에서 사용하고 있습니다. 감사!

+0

당신이'maker_id'에서 떨어져 제품에 대한 다른 정보가 필요하십니까? – Naltharial

+0

예. 얼마나 많은 사람들이 다양한 "상태"에있는 또 다른 비슷한 백작을하고 있습니다. 기본적으로 : SUM (경우 p.status = '준비'THEN 1 ELSE 0 끝) ready_count로. 이러한 유형의 그룹화 쿼리를 결합하여 멋진 결과를 얻을 수있는 방법이 있다면 – Charles

답변

1

이 작업을 시도 할 수 있습니다 :

SELECT c.name,COUNT(1) AS already_used, SUM(IF(p.status = 'ready', 1, 0)) AS ready_count 
FROM categories c 
LEFT JOIN products p 
ON (p.category_id = c.id) 
WHERE p.maker_id = '{$maker_id}' 
GROUP BY c.id;