2014-01-25 2 views
0

У меня есть база данных, и мне нужно создать таблицу и вставить в столбец или столбцы в реальном времени.SQL - вставить реальное время в таблицу базы данных

Я объясню, что именно я хочу, возможно, вы можете помочь.

Я делаю игру, поэтому мне нужно с проходом времени, чтобы пользователь мог получить монеты. Например, если в режиме реального времени 12:00 я хочу, чтобы в 12:15 пользователи получили 50 монет (поэтому переменная внутри базы данных автоматически изменится после прохода времени), а затем в 12:30 они получат 50 монет и т. д. и все, что произойдет, даже если они находятся в сети или в автономном режиме. (я хочу, чтобы база данных работала все время!)

+1

Обычно это не делается * внутри * СУБД. Но чтобы ответить на это, мы должны знать, какую СУБД вы фактически используете. Postgres? Oracle? –

+0

MySQL (с wampserver) – marouska

+1

Почему важно, чтобы их количество монет обновлялось каждые 15 минут, даже когда они в автономном режиме? Почему бы вам просто не обновиться, пока они подключены к сети, и когда они впервые получают доступ в Интернет в течение дня (или что-то еще), вычисляют разницу во времени между выходом из системы и входом в систему и обновляют их количество монет на основе того, что им нужно для заработать в этот период времени? – nhgrif

ответ

1

В 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 (пакетное задание), если хотите.

+0

Спасибо !!!!! это действительно помогло мне, спасибо: D – marouska

Смежные вопросы