首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql:查询返回分数,按特定用户排列。

mysql:查询返回分数,按特定用户排列。
EN

Stack Overflow用户
提问于 2010-01-17 12:40:20
回答 1查看 549关注 0票数 2

假设我有以下分数表(共10行):

代码语言:javascript
复制
rank userid score
---- ------ -----
 1   |455   |10
 2   |435   |9
 3   |354   |8
 4   |342   |7
 5   |343   |6
 6   |123   |5
 7   |125   |4
 8   |128   |3
 9   |5     |2
10   |6     |1

用户可以获取他的得分状态,他可以在他的位置周围获得5个得分位置。这意味着:

  1. 如果用户排名第一,他将获得1-5级的成绩。
  2. 如果用户排在第六位,他将获得4-9级的结果。
  3. 如果用户排在第9位,他将得到6-10级的结果。

我试图找到最优化的方法来执行这些操作,只在SQL中获得用户的评分状态,而不是其他语言集成。

非常感谢!

更新

这个表实际上是动态创建的。

我有一个带有gameid、userid和time和logid的game_log表(这是playid),还有带有logid和score的game_score表。

我使用以下查询:

代码语言:javascript
复制
@rank:=0;

select @rank:=@rank+1 as rank,userid,score from (
select * from (
   select game_log_gameid as gameid,
   game_log_userid as userid,
(select max(game_score_log_score)
        from game_score_log where game_score_log_logid=game_log_id) as score,
        (select game_score_log_timestamp as time from
            game_score_log where game_score_log_logid=game_log_id and
            game_score_log_score = score order by game_score_log_timestamp desc)
            as time from game_log
where game_log_gameid=620
order by score desc,time
) as a group by gameid,userid ) as b order by score desc,time
EN

回答 1

Stack Overflow用户

发布于 2010-01-17 12:56:58

我不确定在一个查询中尝试这样做有多大的意义,因为您需要一个子选择或类似的东西来获得用户的排名,然后可以计算出周围的限制。

因此,使用单个查询获得用户的排名可能更有意义,计算您希望在源编程语言中获得的限制(在这里处理边缘情况要比在SQL中容易得多),然后发出一个使用限制获取所需数据的简单查询。

例如,一旦您像上面那样计算了'startRank‘,您只需使用:

代码语言:javascript
复制
SELECT * FROM table_name WHERE rank >= startRank ORDER BY rank ASC LIMIT 5;

Update:既然您已经发现排名是动态计算的,那么这就没有什么意义了,但是我提出的一般观点仍然有效--在编程语言中处理诸如初始和最终位置这样的边缘情况要比在SQL中容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2080969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档