2014-01-25 20 views
0

我有一個數據庫,我需要創建一個表並實時插入一列或多列。SQL - 在數據庫表中插入實時

我會解釋我到底想要什麼,所以也許你可以幫忙。

我正在做一個遊戲,所以我需要隨着時間的推移用戶獲得硬幣。 例如,如果實時是12:00,我想在12:15用戶獲得50個硬幣(因此數據庫內的變量在時間過後會自動改變),然後在12:30他們獲得50個硬幣等等。 以及即使他們在線或離線也會發生的一切。 (我希望數據庫能夠一直工作!)

+1

這通常不能在DBMS內完成。但要回答這個問題,我們必須知道你實際使用的DBMS。 Postgres的?甲骨文? –

+0

MySQL(with wampserver) – marouska

+1

爲什麼它們的硬幣計數每15分鐘更新一次即使它們處於脫機狀態也很重要?爲什麼不更新他們在線時,以及當他們第一次上網時(或其他)計算註銷和登錄之間的時差,並根據他們需要的更新他們的硬幣數量在那段時間賺錢? – nhgrif

回答

1

在MySQL中,可以始終使用表達式NOW()檢索當前時間。

現在假設你想讓每個玩家以每小時200的速度獲得硬幣。這恰好是每18秒一枚硬幣;這很重要,因爲我們將使用整數算術。

爲自己製作一張表user,其中包含這些列。我想你也可以把其他列放在它上面。如果你願意,你可以添加一個WHERE條款,只更新在查詢的任何給定的運行某些用戶或用戶

UPDATE user 
    SET current_coin_balance = current_coin_balance + 
          ROUND(TIMESTAMPDIFF(SECOND,last_autopay, NOW())/18), 
     last_autopay = NOW() 

user_id    INT 
    current_coin_balance INT 
    last_autopay   DATETIME 

然後,每隔一段時間,運行下面的查詢。如果沒有WHERE子句,查詢將處理所有用戶。

這將計算出自最近一次付款以來的秒數,並將其除以18以獲得硬幣的數量。然後它將貸記用戶的餘額並記錄付款時間。

對於任何特定用戶運行此查詢的頻率無關緊要。每次觸摸用戶記錄時,或者每15分鐘或任何您需要的時間,您都可以運行它。

如果您願意,您可以將其作爲所謂的MySQL事件(批處理作業)運行。

+0

謝謝!!!!!它真的幫助了我,謝謝:D – marouska