2012-03-21 2 views
77

두 개의 테이블 중 하나는 뉴스 용이고 다른 하나는 코멘트 용이며 승인 된 것으로 설정된 상태에 대한 의견을 얻고 싶습니다.mysql 쿼리에 조건이있는 경우 Count with

SELECT ccc_news . * , 
count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) AS comments 
FROM ccc_news 
LEFT JOIN ccc_news_comments ON ccc_news_comments.news_id = ccc_news.news_id 
WHERE `ccc_news`.`category` = 'news_layer2' 
AND `ccc_news`.`status` = 'Active' 
GROUP BY ccc_news.news_id 
ORDER BY ccc_news.set_order ASC 
LIMIT 20 

는 그러나이 쿼리의 문제는 코멘트 열에 대한 페치 최소값가 뉴스 나하지에 해당하는 모든 주석 존재가 있는지를 한 것입니다.

도움이 매우 도움이 될 것입니다. count()

대신에

+4

COUNT 대신 SUM을 사용하면 어떨까요? –

답변

199

사용 sum() 아래에보십시오 :이 하나

count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) AS comments 

:

SELECT ccc_news . * , 
SUM(if(ccc_news_comments.id = 'approved', 1, 0)) AS comments 
FROM ccc_news 
LEFT JOIN ccc_news_comments ON ccc_news_comments.news_id = ccc_news.news_id 
WHERE `ccc_news`.`category` = 'news_layer2' 
AND `ccc_news`.`status` = 'Active' 
GROUP BY ccc_news.news_id 
ORDER BY ccc_news.set_order ASC 
LIMIT 20 
+0

감사합니다. 문제가 해결되었습니다. 감사합니다. ..... – user1163513

+0

http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer- work –

+8

또는 SUM (ccc_news_comments.id = 'approved')을 MySQL 관련 트릭으로 사용 – mojuba

1

이 줄을 교체

coalesce(sum(ccc_news_comments.id = 'approved'), 0) comments 
+0

count (if (ccc_news_comments.id = 'approved', ccc_news_comments.id , 0)) ??? ccc_news_comments.id를 사용하면 합계를 사용하는 의미는 무엇입니까 –

+0

죄송합니다. 의미하시오? 부울 값은 0 또는 1이되고, 그 다음에는 합계가됩니다. 일부 null 값이 0과 합치는 경우 –

+0

병합 속임수는 정말 멋지다! – rewritten

12

이를 작동합니다 : 값이 존재하거나하지 않을 경우

count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, NULL)) 

count()

만 확인합니다. 0은 기존 값과 동일하므로 하나 더 계산하고 NULL은 존재하지 않는 값과 같으므로 계산되지 않습니다.

+0

이 경우'count'는'sum'보다 더 직관적이라고 생각합니다. – Jeffery

45

더 나은 여전히 ​​(이하 어쨌든) : MySQL은 부울 유형이 있지만 단지 C.처럼 INT01 (DB 시스템에서 휴대용되지 않을 수 있습니다로 표현되기 때문에

SUM(ccc_news_comments.id = 'approved') 

이 작동합니다.)

다른 답변에서 언급 한 바와 같이 COALESCE()은 많은 언어 API가 값을 가져올 때 NULL을 자동으로 ''으로 변환합니다. 예를 들어 PHP의 mysqli 인터페이스를 사용하면 COALESCE()없이 쿼리를 실행하는 것이 안전합니다.

+3

이것은 훨씬 더 읽기 쉬운 SQL 코드를 만듭니다. 아름다운 솔루션. –