0
그래서 나는 points_log 테이블 하나와 leaderboard 테이블 하나를 가지고 있습니다.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 년대에 하나 개 이상의 행을 반환됩니다 내가하고 싶은 것은 그 모두를 가지고있다 그것이 내가 합계 (점) 원하는 무엇이든 0 I 될을 반환하지 않는 경우에, 그래서 뭔가를 반환 보장하지 않을 경우 USER_ID의 다음과 같은 쿼리를
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으로 만드는 방법을 모르겠습니다.
도움을 주시면 대단히 감사하겠습니다.