【发布时间】:2019-08-26 07:32:41
【问题描述】:
我正在创建一个网络应用程序,用户可以在其中参加比赛,并根据他们的排名,用户将获得奖励。
(桌名竞赛)
id | contest_name | status
------------------------------------
1 | Test Contest | active
(表参与者)
id | user_id | contest_id | score | time_taken
----------------------------------------------------------
1 | 123 | 1 | 10 | 2332 --> in milliseconds
我的比赛桌奖品分配(桌名 price_distribution)
id | contest_id | rank_start | rank_end | price
-------------------------------------------------------
1 | 1 | 1 | 10 | 50
-------------------------------------------------------
2 | 1 | 11 | 20 | 25
-------------------------------------------------------
意思是如果所有排名在1到10之间的用户,他们将获得50分,排名在11-20之间,20分等等。
我已使用此查询来获取比赛中的所有用户列表及其排名。
SELECT participants.score,
participants.time_taken,
contest.name as contest_name,
user.name as username,
user.image as userimage,
FIND_IN_SET( participants.score, (SELECT GROUP_CONCAT( participants.score ORDER BY participants.score DESC, participants.time_taken ASC )
FROM participants )) AS rank
FROM participants
LEFT JOIN contest
ON participants.contest_id = contest.id
LEFT JOIN user ON user.id = participants.user_id
WHERE participants.contest_id = '1'
ORDER BY participants.score DESC, participants.time_taken ASC
LIMIT 50
以上查询结果是这样的
score | time_taken | contest_name | username | userimage | rank
-----------------------------------------------------------------------
10 | 2356 | test_contest | abc | image | 1
-----------------------------------------------------------------------
上面的查询只根据排名列出用户,没有做任何其他事情。 我想根据排名奖励用户。如何实现这个查询。
我想知道执行时会根据用户的排名奖励用户并从奖品分配表中获取值的查询。
任何帮助将不胜感激。
【问题讨论】: