在mysql数据库中经过一段时间不活动后,更改记录中特定字段的值

时间:2014-10-03 16:08:42

标签: php android mysql sql unity3d

我已经用Unity3D创建了一个android应用程序,每30秒在一个mysql数据库中,在一个mysql数据库中,在“online”字段的记录中发送数字1,其中name =应用程序的播放器名称,这要归功于一个php脚本。 / p>

所以在我的数据库表中我有两列:name和online。 当用户使用该应用程序时,值1将根据当前名称发送到数据库表,在线fiels和正确的位置。

如果用户使用适当的按钮关闭应用程序,则在线字段设置为0。 但是如果用户手动关闭我的应用程序,我无法在线设置为0.那么,如何设置(在PHP代码中?以及如何?)超过30秒后没有在特定在线字段中更新,在线到0?< / p>

感谢那些可以帮助我的人!这太重要了!

1 个答案:

答案 0 :(得分:0)

听起来您要做的就是跟踪哪些用户处于活动状态以及哪些用户处于非活动状态。如果是这样,你就会以一种不必要的困难方式解决这个问题。

不是通过向其发送1和0来打开或关闭online,而是在数据库中有一个timestamp字段,当您的用户与您的应用程序进行交互时,该字段会更新。这是一个使用单独表格的示例(因为我无法看到您的架构):

CREATE TABLE user_activity (
  user_id INT UNSIGNED,
  last_active TIMESTAMP,
  PRIMARY KEY (user_id)
);

每当您的用户与您的数据库进行交互时,请发出如下查询:

INSERT INTO user_activity (user_id, last_active)
  VALUES (?, NOW())
  ON DUPLICATE KEY UPDATE last_active = NOW();

?符号是user_id参数的占位符,您将从MySQL Improved ExtensionPHP Data Objects interface for MySQL提供相应的函数,具体取决于哪一个您决定在PHP代码中使用。

然后,要确定某人是否被视为在线,您将发出如下查询:

SELECT last_active FROM user_activity WHERE user_id = ?;

并使用返回的时间戳做出决定。

请注意,此方法也可以以不同方式实现;您可以决定在数据库中存储偏移时间戳,以表示当用户被视为在线时的最后一点。就个人而言,我宁愿不在我的数据库中存储派生数据。我总是可以在数据库之外导出它,但是如果我改变应用程序的工作方式或者为不同的用户设置不同的会话超时策略,我可能无法恢复有关用户的有意义的信息(它们最后一次活动的确切时间)从这个衍生的&#34;到期日期&#34;字段。

您也不必将此信息存储在单独的表格中;将它存储在包含一般用户数据的表中可能更合适。但是,如果将它存储在单独的表中,则应将user_activity.user_id定义为用户数据表的外键。