2012-05-04 3 views
1

LEFT JOIN을 가지고 놀았으며 모든 질문의 합계를 지금까지의 쿼리에서 모든 사용자에게 제공 할 수 있는지 궁금합니다. 아래의 정보는 로그인 한 사용자가 평가했는지 여부에 대한 정보이지만 다른 사용자의 총 평점도 표시하려고합니다.LEFT JOIN의 모든 행에 대한 SUM()?

$query = mysql_query(" 
SELECT com.comment, com.comment_id, r.rate_up, r.rate_down 
FROM comments com 
LEFT JOIN ratings r 
ON com.comment_id = r.comment_id 
AND r.user_id = '" . $user_id_var . "' 
WHERE page_id = '" . $category_id_var. "'"); 

나는 다음을 시도했다. 그러나 나는 단지 하나의 코멘트/행이 어떤 이유로 반환된다.

$query = mysql_query(" 
SELECT com.comment, com.comment_id, 
r.rate_up, r.rate_down 
SUM(r.rate_up) AS total_up_ratings, 
SUM(r.rate_down) AS total_down_ratings, 
FROM comments com 
LEFT JOIN ratings r 
ON com.comment_id = r.comment_id 
AND r.user_id = '" . $user_id_var . "' 
WHERE page_id = '" . $category_id_var. "'"); 

도움을 주시면 감사하겠습니다. 다른 종류의 JOIN이 필요합니까?

답변

0

SQL에 집계 함수 (예 : SUM())를 사용하는 경우 해당 GROUP BY 절이 필요합니다.

가장 많이 발생하는 경우는 com.comment_id입니다.

SELECT 
    com.comment, 
    com.comment_id, 
    Total.total_down_ratings, 
    Total.total_up_ratings 
FROM comments com 
LEFT JOIN 
(
SELECT 
    SUM(r.rate_up) AS total_up_ratings, 
    SUM(r.rate_down) AS total_down_ratings, 
    r.comment_id 
FROM 
    ratings r 
GROUP BY 
    r.comment_id 
) AS Total 
ON com.comment_id = Total.comment_id 
AND r.user_id = '" . $user_id_var . "' 
WHERE page_id = '" . $category_id_var. "'" 
0

당신은 그것을 이런 식으로 뭔가를 할 수있는이 당신에게 comment_id 당 모든 등급의 합을 줄 것이다?

1

당신이 당신의 SQL의 끝에 GROUP BY page_id를 사용하여 시도 유무 :

0

당신이 목적을 위해 주석 행을 복제하는 경우 나도 몰라하지만이 같은 평가에 대한 쓰기 부속을 시도 할 수없는 경우 :

select com.comment, com.comment_id, r.user_id, r.sum_rate_up, 
r.sum_rate_down from comments com 
left join (select comment_id, user_id, sum(rate_up) as sum_rate_up, 
sum(rate_down) as sum_rate_down from ratings 
group_by comment_id, user_id) as r 
on com.comment_id = r.comment_id where page_id = '".$category_id_var."' 
:

select comment_id, user_id, sum(rate_up) as sum_rate_up, 
sum(rate_down) as sum_rate_down from ratings 
group_by comment_id, user_id; 

다음이 가입 쿼리에 포함

+0

이것은 지금까지 가장 가까이에 온 것 같습니다. 내가 필요한 기능은 현재 사용자가 댓글을 평가 한 경우 표시하고 해당 댓글을 평가 한 모든 사용자의 총 위/아래 평점을 표시하는 것입니다. 'user_id =' ". $ user_id_var." ''를 삽입하거나 제거하는 것은 둘 중 하나를 얻는 것처럼 보이지만 둘 다를 가져 오는 것 같습니다. – john

+0

편집 된 쿼리를 확인하십시오 :'group by comment_id, user_id'를 추가했습니다. 따라서 subselect에서이 코멘트의 등급을 매기는 각 사용자의 의견 등급을 얻었습니다. 전체 질의는 해당 코멘트를 평가 한 모든 코멘트와 정보를 사용자에게 제공해야합니다. 그런 다음 결과 행에서 현재 사용자가 특정 주석을 평가했는지 여부를 확인할 수 있습니다. –

+0

아직 운이 없습니다. 쿼리에 사용자 ID가 필요하지 않을까요? – john