Sql 基于所玩游戏计算玩家等级

Sql 基于所玩游戏计算玩家等级,sql,mysql,Sql,Mysql,我需要显示一个图表,可以显示游戏,分数,所有时间的排名,每周排名,排名与朋友 我有两张桌子: 1) 高分(玩家ID、玩家ID、分数、时间(时间戳)) 2) 好友(playerid、friendid) 我想知道如何使用最少数量的查询来做到这一点 我在游戏网站上使用PHP和MySQL。只计算一次数据,而不是每次请求都计算 您有两种解决方案: cron/async作业 每次插入/更新/删除/截断后触发重新计算统计信息 计算数据一次,而不是每次请求时 您有两种解决方案: cron/async作业 每

我需要显示一个图表,可以显示游戏,分数,所有时间的排名,每周排名,排名与朋友

我有两张桌子:
1) 高分(玩家ID、玩家ID、分数、时间(时间戳))
2) 好友(playerid、friendid)

我想知道如何使用最少数量的查询来做到这一点


我在游戏网站上使用PHP和MySQL。

只计算一次数据,而不是每次请求都计算

您有两种解决方案:

  • cron/async作业
  • 每次插入/更新/删除/截断后触发重新计算统计信息

计算数据一次,而不是每次请求时

您有两种解决方案:

  • cron/async作业
  • 每次插入/更新/删除/截断后触发重新计算统计信息

    • 可以按如下方式对其进行查询:

      SELECT
          gamescores.gameid,
          COUNT(*)+1 AS rank,
          playergamescores.total,
          gamename,
          foldername
      FROM (
          SELECT gameid, playerid, SUM( score ) AS total, time
          FROM high_scores
          GROUP BY gameid, playerid
          ORDER BY gameid, total DESC
      ) AS gamescores
      INNER JOIN
      (
          SELECT gameid, SUM(score) AS total
          FROM high_scores
          WHERE playerid = 361822
          GROUP BY gameid
          ORDER BY total DESC
      ) AS playergamescores
      ON playergamescores.gameid = gamescores.gameid
      INNER JOIN gamemaster
      ON gamescores.gameid = gamemaster.gameid
      WHERE gamescores.total > (
          SELECT SUM( score ) AS total
          FROM high_scores
          WHERE gamescores.gameid = gameid
          AND playerid = 361822                       
      )
      GROUP BY gamescores.gameid
      ORDER BY gamescores.time DESC
      
      谢谢你的回答。。。
      -Navi可以按如下方式对其进行查询:

      SELECT
          gamescores.gameid,
          COUNT(*)+1 AS rank,
          playergamescores.total,
          gamename,
          foldername
      FROM (
          SELECT gameid, playerid, SUM( score ) AS total, time
          FROM high_scores
          GROUP BY gameid, playerid
          ORDER BY gameid, total DESC
      ) AS gamescores
      INNER JOIN
      (
          SELECT gameid, SUM(score) AS total
          FROM high_scores
          WHERE playerid = 361822
          GROUP BY gameid
          ORDER BY total DESC
      ) AS playergamescores
      ON playergamescores.gameid = gamescores.gameid
      INNER JOIN gamemaster
      ON gamescores.gameid = gamemaster.gameid
      WHERE gamescores.total > (
          SELECT SUM( score ) AS total
          FROM high_scores
          WHERE gamescores.gameid = gameid
          AND playerid = 361822                       
      )
      GROUP BY gamescores.gameid
      ORDER BY gamescores.time DESC
      
      谢谢你的回答。。。
      -Navi

      需要澄清的问题很多:你是说,每场比赛结束后,显示比赛分数以及它在历史排名和每周排名中的位置?定义一周,是指最后7个日历日、最后24x7小时、从周一开始的当前一周等?与朋友排名-这是否也按周细分?它是否仅根据每个朋友的最佳高分显示唯一的朋友?需要澄清的是:你的意思是,在每场比赛后,显示游戏分数以及它在历史排名和每周中的位置?定义一周,是指最后7个日历日、最后24x7小时、从周一开始的当前一周等?与朋友排名-这是否也按周细分?它是否仅根据每个朋友的最佳高分显示唯一的朋友?