2012-08-30 2 views
0

내가있어 쿼리처럼 :카운트는 1 행의 반환을 원인

SELECT 
    b.title, 
    b.url, 
    b.`date`, 
    b.gallery, 
    count(c.id) as comments_count, 
    a.name, 
    b.content, 
    b.comments, 
    LEFT(b.content, LOCATE('<page>', b.content)-1) as content_short 
FROM blog b 
LEFT JOIN blog_comments c ON 
    (b.id = c.note AND c.approved = 1) 
LEFT JOIN administrators a ON 
    (b.aid = a.id) 
WHERE 
    b.`date` < now() AND 
    b.active = 1 
ORDER BY b.`date` DESC; 

내가 count(c.id) as comments_count,을 제거 할 때 지금, 내가있어 2 개 행이 돌아왔다. 존재하면 1 행만 반환됩니다.

해결할 수있는 방법은 OT가 아니면 단순히 (select count(id) as comments_count from blog_comments where note = b.id) as comments_count,count(c.id) as comments_count,을 변경해야?

+0

그리고 당신의 데이터 구조입니다

할 필드에 의한 Group by를 추가해야합니까? – hims056

답변

3

Count(*)은 집계 된 함수이므로 그룹으로 적용됩니다. 즉, 그룹에 포함 시키면 모든 그룹에 기능이 적용됩니다. 그룹화 기준을 사용할 때 그룹이 만들어 지므로이 경우 사용하지 않는 것이므로 MySQL은 모든 선택 (조인)이 그룹 1 개로 간주합니다.

따라서 고유 한 그룹에 개수를 적용하고 행 수를 반환합니다.

당신은 당신이 예는 here

+1

철저한 설명. +1. ['GROUP BY' (Aggregate) Functions] (http://dev.mysql.com/doc/en/group-by-functions.html)의 매뉴얼 페이지는 이렇게 설명합니다 : "* 그룹 함수를 GROUP BY 절을 포함하지 않는 문은 모든 행을 그룹화하는 것과 동일합니다. * " – eggyal