0
私はpoints_logという名前のテーブルとleaderboardというテーブルの2つを持っています。Mysqlは新しいクエリでクエリ結果を使用します
mysql> describe points_log;
+---------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| user_id | int(11) | NO | | NULL | |
| points | int(11) | YES | | 0 | |
| date | date | NO | | NULL | |
+---------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> describe leaderboard;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| bucket | varchar(255) | YES | | NULL | |
| user_id | int(11) | YES | | NULL | |
| school_id | int(11) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
私は次のクエリを持っている:
SELECT leaderboard.user_id FROM leaderboard where
leaderboard.bucket=(SELECT bucket FROM leaderboard WHERE leaderboard.user_id=$user_id) AND
leaderboard.school_id = (SELECT school_id FROM leaderboard WHERE leaderboard.user_id=$user_id)
これは、渡された$ USER_IDとバケツであるUSER_IDさんと1つ以上の行を返します。私がやりたいことは、それらのすべてを取るです。 user_idは年代やケースには、それは私が合計(ポイントを)欲しいものを返さないように0私であるためには、何かを返すことが保証されていない場合、問題は、この2番目のクエリで次のクエリ
SELECT sum(points) FROM points_log WHERE user_id=$user_id AND
date >= (SELECT subdate(curdate(), INTERVAL (weekday(now())) DAY))
を実行見つけます各行のuser_id、バケット、合計(ポイント)も返す必要があります。
は、今私が持っているものと、この問題は、そのユーザーのpoints_logに値があるときにのみ動作することである
SELECT leaderboard.user_id,sum(points_log.points) AS points, leaderboard.bucket
FROM points_log LEFT JOIN leaderboard ON points_log.user_id = leaderboard.user_id
WHERE points_log.DATE >= (SELECT subdate(curdate(), INTERVAL (weekday(now())) DAY))
AND leaderboard.bucket=(SELECT bucket FROM leaderboard WHERE leaderboard.user_id=$user_id)
AND leaderboard.school_id = (SELECT school_id FROM leaderboard WHERE leaderboard.user_id=$user_id)
GROUP BY USER_ID ORDER BY SUM(points) DESC
です。値がない場合は、デフォルト値を0にする方法がわかりません。
ご協力いただきありがとうございます。