В MySQL текущее время всегда можно получить с помощью выражения NOW()
.
Теперь предположим, что вы хотите, чтобы каждый игрок получал монеты со ставкой 200 в час. Это одна монета каждые 18 секунд; это важно, потому что мы будем использовать целочисленную арифметику.
Сделайте себе стол user
с этими столбцами в нем. Я полагаю, вы также можете поместить в него другие столбцы.
user_id INT
current_coin_balance INT
last_autopay DATETIME
Затем, каждый так часто, выполните следующий запрос:
UPDATE user
SET current_coin_balance = current_coin_balance +
ROUND(TIMESTAMPDIFF(SECOND,last_autopay, NOW())/18),
last_autopay = NOW()
Если вы хотите, вы можете добавить пункт WHERE
, чтобы обновить только некоторые или нескольких пользователей в любой момент запуска запроса. Без предложения WHERE
запрос будет обрабатывать всех пользователей.
Это будет определять количество секунд с момента последнего платежа и разделить на восемнадцать, чтобы получить количество монет. Затем он будет кредитовать баланс пользователя и записывать время, когда платеж был сделан.
Не имеет значения, как часто вы запускаете этот запрос для любого конкретного пользователя. Вы можете запускать его каждый раз, когда затрагивается запись пользователя, или каждые 15 минут или все, что вам нужно.
Вы можете запустить его как так называемое событие MySQL (пакетное задание), если хотите.
Обычно это не делается * внутри * СУБД. Но чтобы ответить на это, мы должны знать, какую СУБД вы фактически используете. Postgres? Oracle? –
MySQL (с wampserver) – marouska
Почему важно, чтобы их количество монет обновлялось каждые 15 минут, даже когда они в автономном режиме? Почему бы вам просто не обновиться, пока они подключены к сети, и когда они впервые получают доступ в Интернет в течение дня (или что-то еще), вычисляют разницу во времени между выходом из системы и входом в систему и обновляют их количество монет на основе того, что им нужно для заработать в этот период времени? – nhgrif