2012-07-13 2 views
0

간단한 업적 유형 스크립트에서 사용자 점수를 계산하는 스크립트를 웹 페이지에 순서대로 표시합니다. 나는 다음과 같은 MySQL의 기능을 가지고 있지만, 사용자가 아직 어떤 포인트가없는 경우테이블 필드의 합계 사용자가 존재하는지 여부

SELECT u.userid, 
SUM(IF(pa.plus = '1', pa.points_amount, 0)) - SUM(IF(pa.plus = '0', pa.points_amount, 0)) AS points 
FROM awarded_points pa, 
users u WHERE u.userid = pa.userid 
GROUP BY u.userid 
ORDER BY points DESC 
LIMIT 10 

(즉, 더 'pa.userid'찾을 수 후 사용자가 전혀 인출하지 않습니다 없음) 위의 코드가 아직 아무런 포인트가없는 사용자를 포함하도록 만드는 방법은 무엇입니까? 복잡한 변화입니까?

답변

1

사용은 left outer join

SELECT u.userid, 
     SUM(IF(pa.plus = '1', pa.points_amount, 0)) - SUM(IF(pa.plus = '0', pa.points_amount, 0)) AS points 
FROM users u 
LEFT OUTER JOIN awarded_points pa ON u.userid = pa.userid 
GROUP BY u.userid 
ORDER BY points DESC 
LIMIT 10 

great explanation of joins

0

(왼쪽)이 조인 참조

SELECT u.userid, 
SUM(IF(pa.plus = '1', pa.points_amount, 0)) - SUM(IF(pa.plus = '0', pa.points_amount, 0)) AS points 
FROM users as u left join awarded_points pa 
ON u.userid = pa.userid 
GROUP BY u.userid 
ORDER BY points DESC 
LIMIT 10 
관련 문제