【问题标题】:SQL - insert real time in a database tableSQL - 在数据库表中实时插入
【发布时间】:2014-01-25 19:38:20
【问题描述】:

我有一个数据库,我需要创建一个表并实时插入一列或多列。

我会解释我到底想要什么,所以也许你可以帮忙。

我正在制作游戏,所以我需要随着时间的推移用户获得金币。 例如,如果实时时间是上午 12:00,我希望用户在 12:15 获得 50 个硬币(因此数据库中的变量会在时间过去后自动更改),然后在 12:30 他们获得 50 个硬币等. 即使他们在线或离线,所有这些都会发生。 (我希望数据库一直工作!)

【问题讨论】:

  • 这通常不能在内部 DBMS 中完成。但要回答这个问题,我们必须知道您实际使用的是哪个 DBMS。后格雷斯?甲骨文?
  • MySQL(带 wampserver)
  • 为什么他们的硬币计数每 15 分钟更新一次很重要,即使他们处于离线状态?你为什么不在他们在线时更新,当他们第一次上线时(或其他)计算注销和登录之间的时间差,并根据他们需要更新他们的硬币数量在那个时间段内赚到?
  • 这样其他玩家就不会使用实际玩家的硬币计数了
  • 我正在制作的游戏灵感来自我正在玩的另一个在线网络游戏。它的工作原理是这样的:例如有 20 个用户,你必须做的一些动作是从他们那里窃取硬币。经过一段时间后,所有用户(离线或在线)都会获得硬币。对于那些在线的人来说,好处是他们可以为离线的人偷东西,再加上金钱是基于游戏中的许多动作(升级,军械库,带上战士)。所以我不知道怎么做,但有办法做到这一点。

标签: mysql real-time


【解决方案1】:

在 MySQL 中,始终可以使用表达式NOW() 检索当前时间。

现在假设您希望每个玩家以每小时 200 个的速度获得硬币。这恰好是每 18 秒一个硬币;这很重要,因为我们将使用整数算术。

为自己制作一张表user,其中包含这些列。我想你也可以把它放在其他列上。

  user_id                INT
  current_coin_balance   INT
  last_autopay           DATETIME

然后,每隔一段时间,运行以下查询:

  UPDATE user 
    SET current_coin_balance = current_coin_balance +
                          ROUND(TIMESTAMPDIFF(SECOND,last_autopay, NOW()) / 18),
        last_autopay = NOW()

如果您希望可以添加 WHERE 子句,仅更新任何给定查询运行中的一些用户或用户。如果没有WHERE 子句,查询将处理所有用户。

这将计算自最近一次付款以来的秒数,然后除以 18 得到硬币数量。然后它将记入用户的余额并记录付款时间。

您对任何特定用户运行此查询的频率并不重要。您可以在每次触碰用户记录时运行它,或者每 15 分钟运行一次,或者您需要的任何时间。

如果您愿意,可以将其作为所谓的 MySQL 事件(批处理作业)运行。

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多