2013-02-24 3 views
0

이 세 개의 테이블이 있습니다에 가입하세요. 카운트 AS SELECT posts.title, posts.num, posts.status, posts.category, posts.content, posts.member_num, COUNT (posts_replies.blyrb_num)이 쿼리 반환는 SQL 쿼리 INNER는 세 개의 테이블

FROM posts_replies 
INNER JOIN posts ON (posts_replies.blyrb_num = posts.num) 
WHERE posts.status =1 
AND posts.access = 'Public' 
GROUP BY posts.num 
ORDER BY count DESC 
LIMIT 50 

기록은 47

그리고 이것은 게시물에 대한 각 Reply의 Likes Count를 가져오고 싶다는 약간의 업데이트 된 쿼리입니다.

SELECT posts.title, posts.num, posts.status, posts.category, posts.content, posts.member_num, 
COUNT(posts_replies.blyrb_num) AS count, 
COUNT(likes.comment_num ) AS likes_count 
FROM posts_replies 
INNER JOIN posts ON (posts_replies.blyrb_num = posts.num) 
INNER JOIN likes ON (likes.comment_num = posts_replies.num) 
WHERE posts.status =1 
AND posts.access = 'Public' 
GROUP BY posts.num 
ORDER BY count DESC 
LIMIT 50 

이 쿼리는 Likes Count를 반환하지만 Likes가없는 레코드는 포함하지 않습니다. 그래서이 쿼리가 반환하는 레코드는 다음과 같습니다. 40

0 개의 좋아하는 항목이 있더라도 각 답글의 Likes Count를 포함하고 싶습니다.

어떤 도움이 필요합니까?

LEFT JOIN의 생각은 아무도 오른쪽에 일치하지 수있는 경우에도 행과 일치하는 것입니다 여기

SELECT posts.title, posts.num, posts.status, posts.category, 
posts.content,posts.member_num, 
COUNT(posts_replies.blyrb_num) AS count, 
COUNT(likes.comment_num ) AS likes_count 
FROM posts_replies 
INNER JOIN posts ON (posts_replies.blyrb_num = posts.num) 
LEFT JOIN likes ON (likes.comment_num = posts_replies.num) 
WHERE posts.status = 1 
AND posts.access = 'Public' 
GROUP BY posts.num 
ORDER BY count DESC 
LIMIT 50 

당신을 도울 수 LEFT JOIN 대신 INNER JOIN의 사용하면

+1

왼쪽 내부 조인이 아닌 조인. 일치 여부를 원할 경우 –

+1

일치하는 항목이없는 테이블의 행을 가져 오려면 null 레코드를 반환 할 테이블의 어느쪽에 따라 왼쪽 또는 오른쪽 조인이 필요합니다 . – steoleary

+0

감사합니다 @ tony-hopkinson 및 steoleary, 여러분 맞습니다. –

답변

1

감사드립니다. INNER JOIN은 양면에 행이있는 경우에만 작동합니다. :)

+0

와우는 초콜릿처럼 잘 작동했습니다. 감사합니다. :디 –