2014-01-07 12 views
-1

我使用總和的查詢是:如何組合多個記錄並對金額行進行求和,因此只有一條記錄?

SELECT SUM(Amount) as `Amount` 
FROM balances 
WHERE User_ID='$user_id' AND `Wallet_ID` = '$idtw' 

我需要的所有行所以在數據庫中只有一條記錄,因爲在和適用於顯示相結合,更新後撤離的平衡時,這幾乎是不可能的。

+0

爲什麼不顯示最後一條記錄而不是第一條記錄? –

+0

@DamienBlack,我想到了這一點,但後來我決定,爲了性能的原因,我想保持表人數最小。要搜索的行越多查詢速度越慢(imho) – r3wt

+0

爲什麼不更新記錄? – Snowburnt

回答

1

如果我得到它的權利,用戶正餘額記錄,你是關心他的餘額的總和:

SELECT SUM(balance) FROM balances WHERE user_id=? GROUP BY user_id; 

很顯然,我沒有得到它的權利。然後,我嘗試瞭解您的平衡關係是歷史記錄,您只對當前餘額感興趣(=最後一筆記錄)。我會建議給你的記錄版本,並跟蹤哪些是當前記錄。像這樣的方案可能會有所幫助:

CurrentBalance(user_id, symbol, version) 
Balance(user_id, symbol, version, amount) 

你CurrentBalance給你一個給定的符號和用戶的最新版本,你可以輕鬆地跟蹤您的餘額記錄,讀取平衡你的當前餘額。

你的關係的內容可能是這樣的:

CurrentBalance = { 
    (1, "BTC", 3), 
    (2, "BTC", 4), 
    (1, "USD", 2), 
} 

Balance = { 
    (1, "BTC", 1, 1.123), 
    (1, "BTC", 2, 0), 
    (1, "BTC", 3, 4.234), // current balance for user 1 and symbol BTC 
    (2, "BTC", 1, 1.00), 
    (2, "BTC", 2, 1.11), 
    (2, "BTC", 3, 0), 
    (2, "BTC", 4, 5.123), // current balance for user 2 and symbol BTC 
    (1, "USD", 1, 11.11), 
    (1, "USD", 2, 10.12), // current balance for user 1 and symbol USD 
} 

當你更新用戶的當前餘額,你只需增加在CurrentBalance關係對用戶的版本 和他的符號,並添加新記錄 與新版本的Balance關係。

+0

不幸的是,這不會在交易平臺上工作,因爲交易和撤銷行爲會從餘額中刪除(通過更新查詢)。允許單個用戶在單個硬幣上的大量餘額記錄超出無效和懶惰,並且需要大量重寫我的代碼庫。 – r3wt

+1

然後我根本不明白你的問題。 –

+0

經過一個月左右的努力,我終於明白了答案的正確性。所以即使我說你錯了,事實證明你的建議不僅更好,而且是追蹤歷史的唯一可靠方法。感謝您的帖子,我現在明白了。 – r3wt

1

只需製作一個ORDER BY id DESC LIMIT 1即可獲取最後一條記錄。

+0

好吧,我也會採納這個建議。我仍然覺得這是一個不完整的解決方案,所以我會堅持一個更完整的問題。我正在尋找一些安全,可靠,功能和快速融合的產品。 – r3wt

1

一個好的解決方案是每次有人「退出他的剩餘比特幣」時,您可以將信用值更新爲0,例如刪除該行。所以,用戶在該表上沒有行意味着0學分。 只有當你只有一個沒有額外字段的簡單表格時,這是很好的。 (只保存user_id和金額的表格)

+0

我結束了我自己的解決方案,這是完全刪除重複的餘額問題。不幸的是,這造成了更多的問題,因爲現在交易引擎代替數據庫記錄來複制金額。 – r3wt

相關問題