正如标题所示,我正在寻找一种方法来在运行查询10分钟后更新mysql字段。
下面的例子是一个没有时间限制的例子:
mysql_query("UPDATE `players` SET `playcoins`=TRUNCATE(ROUND((`playcoins`+$amount),9),8) WHERE `id`=$player[id] LIMIT 1");
有什么想法吗?
答案 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_execute
和sleep
之前,这是核心要素,你需要做到这一点,我为你提供了另一种解决方案。
如果我看对了,你想每10分钟给一个玩家一些硬币。
正确的做法基本上是:
保存玩家最后一次获取数据库中的硬币。如果您获得了玩家硬币,您首先要检查,最后一次给玩家硬币。现在算一下,他在这个时间差中赚了多少钱。最后将其添加到他的余额并更新字段,在上次保存时,玩家已经获得了硬币。
另一种选择是PHP文件的Cronjob / Scheduled Task,每10分钟调用一次,为每个玩家提供硬币,他应该得到。