0

簡単な実績タイプのスクリプトでユーザーのポイントをカウントし、それらを Web ページに順番に表示するスクリプトがあります。次のmySQL関数がありますが、ユーザーがまだポイントを持っていない場合(つまり、「pa.userid」が見つからない場合、ユーザーはまったくフェッチされません)

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

上記のコードに、まだポイントを獲得していないユーザーを含めるにはどうすればよいですか? 複雑な変更ですか?

4

2 に答える 2

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

結合のすばらしい説明を参照してください

于 2012-07-13T13:32:47.537 に答える
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 
于 2012-07-13T13:35:30.013 に答える