我用来求和的查询是:
SELECT SUM(Amount) as `Amount`
FROM balances
WHERE User_ID='$user_id' AND `Wallet_ID` = '$idtw'
我需要合并所有行,以便数据库中只有一条记录,因为虽然 sum 用于显示,但在提款时更新余额时,这几乎是不可能的。
做对了,用户有 n 余额记录,你对他的余额总和感兴趣:
SELECT SUM(balance) FROM balances WHERE user_id=? GROUP BY user_id;
显然我没有做对。然后我试着理解你的余额关系是一个历史记录,你只对当前的余额感兴趣(=最后一条记录)。我建议您提供您的记录版本并跟踪当前记录。这样的方案可能会有所帮助:
CurrentBalance(user_id, symbol, version)
Balance(user_id, symbol, version, amount)
您的当前余额为您提供给定交易品种和用户的最新版本,您可以轻松跟踪您的余额记录,从余额中读取您的当前余额。
您的关系内容可能如下所示:
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
关系的新版本。
只需ORDER BY id DESC LIMIT 1
获取最后一条记录即可。
一个好的解决方案是每次有人"提取他剩余的比特币"时,您可以例如删除该行,而不是将积分更新为 0。因此,用户在该表上没有行意味着 0 个配额。仅当您只有一个非常简单的表而没有其他字段时,这才有用。(仅保存user_id和金额的表)