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

Php 在mysql数据库中经过一段时间的不活动后,更改记录中特定字段的值,php,android,mysql,sql,unity3d,Php,Android,Mysql,Sql,Unity3d,我用Unity3D为android制作了一个应用程序,借助php脚本,每30秒在mysql数据库中在线发送一个字段记录中的数字1,其中name=应用程序的播放器名称 所以在我的数据库表中有两列:name和online。 当用户使用应用程序时,值1将根据当前名称发送到在线字段下的数据库表和正确的位置 如果用户使用“批准”按钮关闭tha应用程序,则“联机”字段设置为0。 但是如果用户手动关闭我的应用程序,我无法将online设置为0。那么,如何在php代码中设置?怎么做?超过30秒后,在特定的联机字

我用Unity3D为android制作了一个应用程序,借助php脚本,每30秒在mysql数据库中在线发送一个字段记录中的数字1,其中name=应用程序的播放器名称

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

如果用户使用“批准”按钮关闭tha应用程序,则“联机”字段设置为0。 但是如果用户手动关闭我的应用程序,我无法将online设置为0。那么,如何在php代码中设置?怎么做?超过30秒后,在特定的联机字段中没有更新,是否联机到0


谢谢那些能帮助我的人!这太重要了

听起来你只想跟踪哪些用户处于活动状态,哪些用户处于非活动状态。如果是这样的话,你将以一种不必要的困难方式进行

与其通过发送1和0来打开或关闭联机,不如在数据库中设置一个时间戳字段,当用户与应用程序交互时更新该字段。下面是一个使用单独表的示例,因为我看不到您的模式:

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参数的占位符,您将从或提供给相应的函数,具体取决于您决定在PHP代码中使用的参数

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

SELECT last_active FROM user_activity WHERE user_id = ?;
并使用返回的时间戳做出决定

注意,这种方法也可以以不同的方式实现;您可以决定在数据库中存储一个偏移时间戳,以表示用户将被视为在线的最后一点。就我个人而言,我不希望像这样在数据库中存储派生数据。我总是可以在数据库之外派生它,但是如果我更改了应用程序的工作方式,或者为不同的用户使用了不同的会话超时策略,我可能无法从这个派生的过期日期字段中恢复有关用户的有意义的信息,即用户上次处于活动状态的确切时间


您也不必将这些信息存储在单独的表中;将其存储在保存一般用户数据的表中可能更合适。但是,如果您确实将其存储在单独的表中,则应将user\u activity.user\u id定义为用户数据表的外键。

您可以共享您尝试过的内容吗?您可以尝试将验证活动的方式改为maybe,存储活动何时过期的时间戳,例如now+10分钟,每次他们在应用程序中做一些事情,都会像以前一样更新该字段,现在+10分钟。您只需检查时间戳是否已过期=不再有效。谢谢您mr12086!你给了我一个好主意!!!相关非重复问题:回答完整准确。非常感谢你的帮助!请注意,我稍微更改了示例,以使用更合适的PK并插入到。。。在重复密钥更新时。如果原始UPDATE语句是较大的用户数据表的一部分,而该行已经存在,则可以使用原始UPDATE语句。