首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从2个表中计算高分排名

问从2个表中计算高分排名
EN

Stack Overflow用户
提问于 2010-09-08 00:31:00
回答 2查看 736关注 0票数 0

我有一个琐事游戏,我想奖励2个事件的用户:

1)正确回答

2)将问题发送到题库

我想要查询特定球员的得分和排名,我使用以下查询:

代码语言:javascript
复制
SELECT (correct*10+sent*30) AS score, @rank:=@rank+1 AS rank 
FROM   (  trivia_players 
          JOIN (  SELECT COUNT(*) AS sent, senderid 
                  FROM trivia_questions 
                  WHERE senderid='$userid'
               ) a 
          ON trivia_players.userid=a.senderid
       )  
       ORDER BY score DESC

如果玩家在两个表中,也就是回答正确并发送了一个问题,它就会起作用。但是,如果玩家没有发送问题,它就不起作用

你知道如何修复这个查询吗?($userid是给定的参数)

谢谢!

谢谢,汤姆!唯一的问题是排名不正确:

用户得分排名

58217 380 1

12354 80 3

32324 0 2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-08 00:43:38

我可能会这样做:

代码语言:javascript
复制
SELECT
    user_id,
    score,
    rank
FROM
(
    SELECT
        TP.user_id,
        (TP.correct * 10) + (COUNT(TQ.sender_id) * 30) AS score,
        @rank:=@rank + 1 AS rank
    FROM
        Trivia_Players TP
    LEFT OUTER JOIN Trivia_Questions TQ ON
        TQ.sender_id = TP.user_id
    GROUP BY
        TP.user_id,
        TP.correct
    ORDER BY
        score DESC
) AS SQ
WHERE
    SQ.user_id = $user_id

我不经常使用MySQL,所以它的语法可能并不完美。我认为您可以在MySQL中使用如下所示的子查询。假设MySQL通过只计算具有非空值的行来处理COUNT(),这应该是可行的。

关键是您对琐碎问题中的非空列进行计数,以便按用户对它们进行计数,并且您需要使用子查询,以便在约束到特定用户id之前获得每个人的排名。

票数 1
EN

Stack Overflow用户

发布于 2010-09-08 00:35:29

您是否尝试过使用RIGHT JOIN或LEFT JOIN?就在我头上!

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

https://stackoverflow.com/questions/3660606

复制
相关文章

相似问题

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