PHP / MySQL在10分钟后更新mysql字段。

时间:2015-03-12 00:56:02

标签: php mysql

正如标题所示,我正在寻找一种方法来在运行查询10分钟后更新mysql字段。

下面的例子是一个没有时间限制的例子:

mysql_query("UPDATE `players` SET `playcoins`=TRUNCATE(ROUND((`playcoins`+$amount),9),8) WHERE `id`=$player[id] LIMIT 1"); 

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

MySQL数据库有一类称为EVENT的对象。它基本上是一段SQL代码,它在特定时间或特定时间间隔运行。

您可以使用此类代码创建一个事件,以便在历史记录中的正确时间执行您需要的操作。此特定代码将创建一个仅在未来十分钟运行的事件。

DELIMITER $$
DROP EVENT IF EXISTS coins_user12345$$
CREATE EVENT coins_user12345
    ON SCHEDULE
        AT NOW() + INTERVAL 10 MINUTE
    ON COMPLETION NOT PRESERVE
    ENABLE
DO BEGIN
    UPDATE players 
       SET playcoins=TRUNCATE(ROUND((playcoins+123),9),8) 
     WHERE id=12345
     LIMIT 1;
END$$
DELIMITER ;

要使用这些EVENT对象,您必须正确配置事件调度程序。读这个。 http://dev.mysql.com/doc/refman/5.6/en/events-configuration.html一些廉价的共享托管服务提供商不允许使用事件,因此无法保证这一点。

答案 1 :(得分:1)

你走错了路。当然你可以做到。您可以使用PHP来完成此操作。但你不应该。 PHP不是执行此类任务的正确语言。在我开始讨论shell_executesleep之前,这是核心要素,你需要做到这一点,我为你提供了另一种解决方案。

如果我看对了,你想每10分钟给一个玩家一些硬币。

正确的做法基本上是:

保存玩家最后一次获取数据库中的硬币。如果您获得了玩家硬币,您首先要检查,最后一次给玩家硬币。现在算一下,他在这个时间差中赚了多少钱。最后将其添加到他的余额并更新字段,在上次保存时,玩家已经获得了硬币。

另一种选择是PHP文件的Cronjob / Scheduled Task,每10分钟调用一次,为每个玩家提供硬币,他应该得到。