2016-05-17 40 views
0

我有一張遊戲的表格,用於跟蹤遊戲中取出的貸款。遊戲無法讀取時間戳,因此我不得不使用基於增量的系統來告知在下一筆貸款支付前已經過了多少時間。基本上,服務器每天重新啓動6次,所以使用表格中的一列來跟蹤重新啓動,可以確保玩家每天只能在遊戲中扣除1次貸款支付(否則每次重新啓動都會扣除一次)打破球員的銀行)。爲了達到這個目的,我想要有一個存儲過程,服務器將在啓動時運行,以增加表格以跟蹤誰應該在下一個重新啓動週期進行付款。除了在表格中設置這些值之外,大部分內容都在遊戲中進行控制。編寫存儲過程時遇到問題

表列:

id | active | balance | count | due | flags | default 

所以這裏是存儲過程的邏輯,就應該對所有行運行。除了我從未寫過存儲過程,也不知道如何根據條件將它應用於所有行。這是邏輯:

if active != 0 then continue with the below actions 
if due == 0 and count > 1 then set count - 1 
if due == 0 and count == 1 then set count = 6 and due = 1 
if due == 1 then set count = 6 
if balance == 0 then set due = 0 and count = 0 and active = 0 

我希望能在所有列上運行。遊戲將處理從玩家的銀行(另一個表)中扣除餘額,只要到期= 1,然後設置到期= 0。它還將處理插入初始貸款並將所有值設置爲默認值以開始上述過程下一次重啓。然後存儲過程將負責其餘部分,因此如果它們的餘額爲0,它將停用貸款並將所有值清零。但是,如果它處於活動狀態,則會增加該玩家的服務器重新啓動次數,並在6次重新啓動後設置應有標誌,然後在玩家在遊戲中支付並且遊戲設置的到期值= 0時重新啓動整個事情。

我不是SQL最大的,更不用說存儲過程了,尤其是整個表。任何幫助,將不勝感激。

回答

1

這應該讓你非常接近。

CREATE PROCEDURE [dbo].[usp_theProcedure] 
AS 
BEGIN 
UPDATE theTable 
SET due = CASE WHEN balance = 0 THEN 0 WHEN (due = 0 AND [count] = 1) THEN 1 ELSE due END, 
    [count] = CASE WHEN balance = 0 THEN 0 WHEN (due = 0 AND [count] = 1) OR due = 1 THEN 6 WHEN (due = 0 AND [count] > 1) THEN [count] - 1 ELSE [count] END, 
    active = CASE WHEN balance = 0 THEN 0 ELSE active END 
WHERE active <> 0 
END 
+0

這是我得到的:MySQL說:#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本對應的手冊,在[[count] = 1附近使用正確的語法)THEN 1 ELSE due END,[count] = CASE WHEN balance = 0 THEN 0 WH'at line 3 – Flynn

+0

嘗試刪除括號。 MySQL可能不喜歡它們。 – Bill

+0

同樣的錯誤,但第7行noiw – Flynn