많은 사람들이 여러 게임을 여러 번 할 수있는 멀티 게임 토너먼트 점수 판을 만들고 있습니다. 각 게임의 점수에 따라 점수를 지정합니다. 실제 점수가 아닙니다.여러 게임의 플레이어에게 순위별로 점수 지정
예컨대
동키 콩 (Donkey Kong)
Rank | Player | Score | Points Awarded
1 | Player2 | 34,000 | 1,000
2 | Player1 | 32,000 | 999
3 | Player3 | 29,000 | 998
Robotron
Rank | Player | Score | Points Awarded
1 | Player1 | 39,000 | 1,000
2 | Player3 | 32,000 | 999
3 | Player2 | 21,000 | 998
대회 순위
Player1 - 1,999 Points
Player2 - 1,998 Points
Player3 - 1,997 Points
그래서 지금까지 내가 순위하고 포인트 계산은 ...
SELECT
`id`,
`userID`,
`gameID`,
`gamescore`,
`rank`,
1001.0 - (rank) AS points
FROM (
SELECT
`id`,
`userID`,
`gameID`,
`gamescore`,
@curr_rank := IF(@prev_rank = id, @curr_rank, @curr_rank + 1) AS rank,
@prev_rank := id
FROM
`submit_score`,
(SELECT @curr_rank := 0) y,
(SELECT @prev_rank := NULL) z
WHERE `submit_score`.`tournID` = 2
ORDER BY `gamescore` DESC
) ranked_game;
를 잘 작동하지만 순위 당 게임에서 포인트를 할당 할 수 및 각 플레이어 점의 총계를 가질 필요가 내가 할 수있는 그런 다음 목록에 표시하십시오.
먼저 별도의 데이터 포인트. 두 번째 - 수여 된 포인트는 항상 1 위부터 가장 낮은 점수까지 동일 할 것입니까? 비즈니스 로직을 코드로 옮기고 있습니까? – JackTheKnife
예 점은 항상 순위마다 동일합니다. –
OK -이 값은 중복되므로 (게임 당 순위도 마찬가지이므로) DB에서 해당 데이터를 멀리 이동하십시오. 그런 다음 점수 열에 정렬 (desc)이있는 쿼리의 각 게임에 대한 배열 (해시 맵)을 만듭니다 (키가 순위 번호이고 값이 배열이 될 순위 1 등으로 가장 높은 점수를줍니다) 선수 ID와 점수의 목록). 이런 종류의 배열을 반복하면 플레이어 ID를 사용하여 임시 변수 (또는 배열)를 만들고 해당 포인트를 할당 할 수 있습니다. 마지막에는 각 플레이어 ID에 대한 총점으로 끝나야합니다. – JackTheKnife