2014-02-20 2 views
1

submissions, submissions_votesusers의 3 개의 테이블이 있습니다. 나의 현재 쿼리여러 테이블을 결합 할 때 사용자가 합계에 있는지 확인하십시오.

SELECT s.*, u.username, u.avatar, SUM(sv.up) helpfulVotes 
FROM submissions s 
INNER JOIN users u 
    ON s.user_id = u.id 
LEFT JOIN submissions_votes sv 
    ON s.id = sv.submission_id 
WHERE s.id = 23 
GROUP BY s.id 

나를 위해 제출 세부 사항을 제출 한 사용자 및합니다 (submissions_votes 테이블에서 제공) 제출에 helpfulVotes의 양을 반환합니다.

잘 작동하지만 SUM (sv.up) 내의 조건을 테스트하여 해당 합계 내의 사용자 중 submissions의 특정 user_id와 일치하는지 확인합니다.

내가 이런 일을 생각했지만 그것이 작동하지 않습니다

SELECT s.*, u.username, u.avatar, SUM(sv.up) helpfulVotes, 
SUM (IF(sv.user_id = 15, count, 1)) as currentUserVoted, <---- ??? 
FROM submissions s 
INNER JOIN users u 
    ON s.user_id = u.id 
LEFT JOIN submissions_votes sv 
    ON s.id = sv.submission_id 
WHERE s.id = 23 
GROUP BY s.id 

가 어떻게 현재 사용자의 ID에 해당 금액 내에서 일치하는 항목이 있는지 확인 할 수 있습니다 (이 경우, 15) ?

답변

1

예는 사용자 ID를 기반으로 다른 열 합계하려는 경우 또는 CASE

SUM (CASE WHEN sv.user_id = 15 THEN sum_other_col ELSE 0 END) as currentUserVoted 
사용할 수있는 사용자 15

SELECT 
    s.*, 
    u.username, 
    u.avatar, 
    SUM(sv.up) helpfulVotes, 
    SUM(sv.user_id = 15) AS currentUserVoted 
FROM 
    submissions s 
    INNER JOIN users u 
    ON s.user_id = u.id 
    LEFT JOIN submissions_votes sv 
    ON s.id = sv.submission_id 
WHERE s.id = 23 
GROUP BY s.id 

당신에게 수를 줄 것이다 단지 SUM (sv.user_id = 15)처럼 SUM()에 조건을 사용할 수 있습니다

+1

Word 님, 감사합니다. –

관련 문제