Java 和 MySQL - 排名

标签 java mysql

我正在制作一款游戏,我需要一个排名系统。我已经用 MySQL 保存了所有统计数据,如杀戮、死亡、获胜、无辜射击等。我现在对如何对每个人进行排名一无所知。我想通过 MySQL 获得它,但它们更新得很快。我想我可以在游戏开始时将所有排名加载到 HashMap 中,但这非常低效,因为有数千名玩家。我还想使用大部分统计数据来解决这个问题。有人可以向我解释一下我该如何做到这一点吗?谢谢!

最佳答案

一种方法是使用 mysql 事件来触发存储过程。存储过程将执行排名并将排名存储在数据库中。然后,您只需将事件触发时间设置为您想要的任何时间,例如 10 分钟。

mysql 事件:https://dev.mysql.com/doc/refman/5.7/en/events.html

CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;
schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
                DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

然后您将设置一个存储过程来生成排名并为您的玩家设置它:https://dev.mysql.com/doc/refman/5.7/en/stored-programs-views.html

示例过程如下:

CREATE PROCEDURE simpleproc (OUT param1 INT)
    BEGIN
      SELECT COUNT(*) INTO param1 FROM t;
    END

您可以根据需要使过程变得复杂。

关于Java 和 MySQL - 排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30952210/

相关文章:

java - 发送 HTTP POST 时出现 InvalidAuthenticityToken 异常

java - Google Guice + TestNG(v6.14.3) 组抛出 java.lang.RuntimeException : Unable to instantiate resource

java - 启用工具栏图标时如何显示汉堡图标

mysql - 在mysql数据库中随机获取特定实体的记录

Php foreach数据插入

mysql - 加载数据文件 : Invalid ut8mb4 character string

mysql - 具有动态列名的 SQL SELECT 语句

java - 用于 Fluent API 方法的 Eclipse 插件

mysql - 如何检查 MySQL 中的无效值?

java - 如何在 firebase 中创建条件