Я сделал приложение для Android с Unity3D, которое каждые 30 секунд отправляет номер 1 в записи поля «онлайн», где имя = имя игрока приложения, в базе данных mysql, благодаря сценарию php.
Итак, в моей таблице базы данных у меня есть два столбца: имя и онлайн.
Пока пользователь использует приложение, значение 1 будет отправлено в таблицу базы данных, в онлайн-поля и в нужное место, в соответствии с текущим именем.
Если пользователь закрывает приложение с помощью кнопки «Подтвердить», в поле «Онлайн» устанавливается значение 0.
Но если пользователь вручную закрывает мое приложение, я не могу установить в сети значение 0. Итак, как установить (в коде php? И как?) После более чем 30 секунд без обновления в определенном поле онлайн, в режиме онлайн, в 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 Улучшенное расширение или Интерфейс PHP Data Objects для MySQL, в зависимости от того, какой из них вы решили использовать в своем коде PHP.
Затем, чтобы определить, считается ли кто-то онлайн или нет, вы должны выполнить запрос, подобный следующему:
SELECT last_active FROM user_activity WHERE user_id = ?;
и используйте возвращенную временную метку, чтобы принять решение.
Обратите внимание, что этот подход может быть реализован по-разному; Вы могли бы решить хранить смещение отметка времени в базе данных для представления последний момент, когда пользователь будет считаться онлайн. Лично я бы предпочел не хранить производные данные как это в моей базе данных. Я всегда могу получить его за пределами базы данных, но если я изменю способ работы моего приложения или установлю разные политики тайм-аута сеанса для разных пользователей, я не смогу восстановить значимую информацию о пользователе (точное время их последней активности) из этого полученного поля «срок годности».
Вам также не нужно хранить эту информацию в отдельной таблице; может быть более целесообразно хранить его в таблице, содержащей общие пользовательские данные. Однако, если вы храните его в отдельной таблице, вы должны определить user_activity.user_id
как внешний ключ к таблице пользовательских данных.
Других решений пока нет …