2014-10-03 25 views
-2

我已經爲Unity3D製作了一個android應用程序,每30秒發送一次字段「在線」記錄中的數字1名稱=應用程序的播放器名稱,在一個MySQL數據庫中,感謝一個PHP腳本。在一段時間的不活動數據庫後,更改記錄中某個特定字段的值

所以在我的數據庫表中我有兩列:名稱和在線。 在用戶使用應用程序時,根據當前名稱,值1將被髮送到數據庫表,在線fiels和正確的地方。

如果用戶用合適的按鈕關閉應用程序,在線字段設置爲0. 但是,如果用戶手動關閉我的應用程序,我不能將在線設置爲0所以,如何設置(在PHP代碼中?以及如何?)超過30秒後沒有在特定的在線領域更新,在線到0?

感謝那些能幫助我的人!這非常重要!

+1

你可以分享你所嘗試過的嗎? – 2014-10-03 16:10:51

+0

你可以試着改變你如何驗證活動,存儲它們何時到期的時間戳(例如,現在+ 10分鐘),並且每次他們在應用程序中執行某些操作時,都會像以前一樣更新該字段(現在爲+10分鐘)。您只需檢查該時間戳是否已過期=不再處於活動狀態。 – mr12086 2014-10-03 16:21:15

+0

謝謝mr12086!你給了我一個好主意! – aleknx1000 2014-10-03 16:28:55

回答

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(); 

?符號是您將從MySQL Improved ExtensionPHP Data Objects interface for MySQL提供給相應功能的user_id參數的佔位符,具體取決於您決定在您的PHP代碼中使用哪一個參數。

然後才能確定是否有人在網上或沒有考慮,你會發出這樣的詢問:

SELECT last_active FROM user_activity WHERE user_id = ?; 

,並使用時間戳返回到做決定。

請注意,這種方法也可以以不同的方式實現;您可以決定將偏移量時間戳存儲在數據庫中,以表示當用戶將被視爲在線時的最後一點。就我個人而言,我不希望在我的數據庫中存儲衍生數據。我總是可以在數據庫之外派生它,但是如果我改變應用程序的工作方式或爲不同的用戶提供不同的會話超時策略,我可能無法恢復關於用戶的有意義的信息(它們確切的時間是上次激活的)從這個派生的「到期日期」字段。

您也不必將此信息存儲在單獨的表中;將其存儲在保存一般用戶數據的表格中可能更合適。但是,如果將它存儲在單獨的表中,則應該將user_activity.user_id定義爲用戶數據表的外鍵。

+0

完整和準確的答覆。非常感謝你的幫助! – aleknx1000 2014-10-03 16:46:41

+0

請注意,我稍微更改了示例,以使用更合適的PK和「INSERT INTO ... ON DUPLICATE KEY UPDATE」。如果這是更大的用戶數據表的一部分,那麼您將使用原始的'UPDATE'語句,其中該行已經存在。 – Air 2014-10-03 16:50:46

相關問題