当前位置: 首页 > 知识库问答 >
问题:

SQL:获取数据库中的玩家排名

郎正初
2023-03-14

我正在为我正在构建的游戏建立一个高分体系。我认为,或者说希望这是一个容易回答的问题。我需要得到球员对其他球员的“排名”。假设有3名球员,你的分数是最低的。所以你的排名是#3。我如何在SQL中获得它?我想我使用了COUNT,但我不确定如何遍历每一行来找到我的球员的分数。我知道我将按订购。

这是我的基本表:

SELECT [ID]
  ,[Email]
  ,[High_Score]
  ,[Board_Name]
  ,[Difficulty]
  ,[Player_Time]
FROM [Rune_Master].[dbo].[High_Scores]

我需要按Board_Name、难度进行筛选,因为每个棋盘有3个难度,玩家可以在每个棋盘上按3种不同的方式进行排名。最终,尽管这是基于他们与其他人相比的高_分数。每个棋盘的每个难度只有一分。因此,分数将因棋盘难度而异。我希望这一切都有意义

这就是我目前的情况:

--Player Data
DECLARE @PlayerScore AS BIGINT
DECLARE @PlayerRank AS NVARCHAR(100)

IF EXISTS(SELECT [High_Score] FROM [dbo].[High_Scores] WHERE [Board_Name] = @Board AND [Difficulty] = @Difficulty AND [Email] = @Email) BEGIN
    SET @PlayerScore = (SELECT [High_Score] FROM [dbo].[High_Scores] WHERE [Board_Name] = @Board AND [Difficulty] = @Difficulty AND [Email] = @Email)
    SET @PlayerRank = (SELECT TOP 1 COUNT([High_Score]) FROM [dbo].[High_Scores] WHERE [Board_Name] = @Board AND [Difficulty] = @Difficulty ORDER BY [High_Score] DESC)
END ELSE BEGIN
    SET @PlayerScore = 0;
    SET @PlayerRank = 'UnRanked';
END

--Top 5 Player Scores
SELECT DISTINCT TOP 5
    [High_Score] AS [Score],
    [Player_Time],
    [Board_Name],
    [Email],
    @PlayerScore AS 'Player_Score',
    @PlayerRank AS 'Player_Rank'
FROM
    [dbo].[High_Scores]
WHERE
    [Board_Name] = @Board AND
    [Difficulty] = @Difficulty
ORDER BY [High_Score] DESC, [Player_Time] DESC, [Email]

共有1个答案

刁浩言
2023-03-14

如果有人需要,这里有答案。谢谢大家的帮助。

代码:

    DECLARE
    @Board AS NVARCHAR(100) = 'Templo_Mayor',
    @Difficulty AS INT = 0,
    @Email AS NVARCHAR(500) = 'Computer',
    @PlayerRank AS NVARCHAR(100)


CREATE TABLE #Rank
(
    High_Score BIGINT,
    Row# BIGINT,
    EMAIL NVARCHAR(500)    
 )
INSERT INTO #Rank (High_Score, Row#, EMAIL) 
SELECT [High_Score], ROW_NUMBER() OVER(ORDER BY [High_Score] DESC) AS Row#, [EMAIL] FROM [dbo].[High_Scores] WHERE [Board_Name] = @Board AND [Difficulty] = @Difficulty ORDER BY [High_Score] DESC

SELECT Row# FROM #Rank WHERE EMAIL = @Email ORDER BY [High_Score] DESC
DROP TABLE #Rank

所以为了解释我所做的:

  1. 声明了我的变量
  2. 创建了一个临时表,我要用它来构建我的排名表(临时表)
  3. 用添加行计数器的数据填充我的排名表
  4. 通过电子邮件从我的排名表中选择我的用户的排名,因此我只返回他们的排名。
 类似资料:
  • 我有一个使用firebase数据库实时排名的迷你游戏。 在我从firebase获得用户分数列表后,我想获得列表之外的当前用户的分数。 获取当前用户的分数很容易,但如何知道列表中的排名是OrderByChild(“分数”)。 这是获取排行榜的代码。

  • 我正在尝试查看玩家的库存中是否有以下物品,如果有,我想移除这些物品并向他们发送消息,说该物品已被移除,但我不知道如何做到这一点,这就是我目前拥有的: 我在.contains(bannedItems,1))行上收到一个错误。 谢谢你的帮助!

  • 问题内容: 我的代码有问题。 像这样的情况: 我有一个下拉列表,如果选择“个人”,则会出现新的下拉列表,其中包含从数据库查询中检索到的数据;如果选择“公开”,则该下拉列表将消失。 这样的HTML代码: 查询如下: 像这样的JavaScript代码: 我不知道如何将值/结果发送到javascript代码(选择选项中的值和名称)。 问题答案: 在javascript中,您必须对您的php文件进行操作:

  • 本文向大家介绍获取SQL Server数据库元数据的几种方法,包括了获取SQL Server数据库元数据的几种方法的使用技巧和注意事项,需要的朋友参考一下 元数据简介 元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或者再简单一点就是“关于数据的信息”,日常生活中的图例、图书馆目录卡和名片等都可以看作是元数据。在关系型数据库管理系统 (DBMS) 中,元数据描述了数据的结构和意

  • 我知道你可以得到损坏的原因 在实体损坏事件中,但是我还没有找到返回造成损坏的实体的方法。我需要找出这一点,这样我就可以检查玩家的库存中是否有某个物品。

  • 我有一个SQL函数,它返回一个对象。 上面返回一个对象,比如 我需要从对象中获取单独的值。