stackoverflow に関する多くの役立つ情報を見つけましたが、次の問題を解決するにはまだ少し不足しています。
次のような2つのテーブルuserscoresとuserpointsがあります。
#table userscores (saves userpoints each month)
date userid points
2012-05-01 1 23
2012-06-01 1 34
#table userpoints (recent points)
userid points
1 23
2 10
3 15
以下を使用して、現在の月の最近のユーザーポイントと保存されたユーザーポイント (テーブル「userscores」から) の差を計算する方法を見つけることができました。
SELECT userpoints.userid, userpoints.points - userscores.points AS mpoints
FROM `userpoints`,`userscores`
WHERE userpoints.userid=userscores.userid
AND YEAR(userscores.date) = YEAR(CURDATE())
AND MONTH(userscores.date) = MONTH(CURDATE())
AND userpoints.userid != ".$adminID."
ORDER BY mpoints DESC;"
ただし、このクエリは両方のテーブルのユーザー ID を比較するだけであり、テーブル userpoints には存在するがテーブル userscores には存在しないユーザーID は無視されます。
新しく作成されたユーザー ID (テーブル ユーザーポイント内) もスコアと見なされるように、クエリを変更する必要があります。
テーブルuserscoresに存在しないユーザーIDを取得するためにクエリを実行する方法を見つけました:
SELECT userpoints.userid FROM `userpoints`
WHERE userpoints.userid
NOT IN(SELECT qa_userscores.userid FROM `qa_userscores`)
両方を組み合わせる必要がありますが、次のことを試してもうまくいきません。
SELECT userpoints.userid, userpoints.points - userscores.points AS mpoints
FROM `userpoints`,`userscores`
WHERE (
userpoints.userid = userscores.userid
AND YEAR(userscores.date) = YEAR(CURDATE())
AND MONTH(userscores.date) = MONTH(CURDATE())
AND userpoints.userid != ".$adminID."
)
OR (
userpoints.userid IN(SELECT userpoints.userid FROM `userpoints`
WHERE userpoints.userid
NOT IN(SELECT DISTINCT userscores.userid FROM `userscores`))
)
ORDER BY mpoints DESC;
どんな助けでも感謝します。