如何合并多条记录并对“金额”行求和,因此之后只有一条记录



我用来求和的查询是:

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和金额的表)

最新更新