首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >智能用户排名计算

智能用户排名计算
EN

Stack Overflow用户
提问于 2012-12-18 15:35:13
回答 1查看 109关注 0票数 2

我有一个纸牌游戏,其中用户是根据乳清赢得了多少游戏排名。总体评分是预先计算的,以便能够快速加载,但我有关于排名计算的问题。

排名的计算方法如下:

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

UPDATE t_ratings AS r
JOIN
  (
    SELECT
        userId, (@userRank := @userRank + 1) as rank
        FROM (
        SELECT
            r.userId,
            r.solvedCount,
            r.playedCount
       FROM
        t_ratings AS r                        
    ORDER BY r.solvedCount DESC , r.playedCount ASC) AS t
  ) AS rt
  ON rt.userId = r.userId
SET r.rank = rt.rank

但最近,我有时开始收到以下错误:

代码语言:javascript
复制
Deadlock found when trying to get lock; try restarting transaction

因此,我想知道是否有更好的方法来计算用户等级以避免死锁?

EN

回答 1

Stack Overflow用户

发布于 2012-12-20 10:54:49

这就是我在SQL Server中的做法...因为我不是mySQL的人,所以我不确定mySQL是否有窗口函数。

代码语言:javascript
复制
With    cte As
(
        Select  Rank() Over (ORDER BY r.solvedCount DESC , r.playedCount ASC) As [rank], 
                userID
        From    t_ratings As r
)
Update  tr
Set     [rank] = c.[rank]
From    t_ratings tr
Join    cte c
        On  tr.userID = c.userID
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13928349

复制
相关文章

相似问题

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