【发布时间】:2017-06-17 23:32:25
【问题描述】:
我正在构建一个用于财务预算规划的应用程序,但我现在遇到了困难。在应用程序中,用户应该每个月都为自己的财务做预算。
他添加交易(收入和支出),并为他的每个类别单独分配预算,即 500 美元用于杂货。每次他在杂货上花点钱,都会从这 500 美元中扣除。但也有可能他在杂货上的花费超过了他的预算(= 超支),甚至他在各个类别中的预算甚至比他实际拥有的更多(= 超支)。
问题是:我不知何故需要处理理论上无限量的先前数据。因为用户在前几个月超支或超支的一切都需要流血到今天。这意味着:如果用户在 1 月份超支了 500 美元并且尚未补偿,那么这 500 美元仍然需要在 6 月份截断他的可用预算。
现在通过上个月的数据计算这个月的数据已经不是什么大问题了,但是我在计算前一个月的时候只得到了上个月的正确数据。这似乎是无限循环。
数据库结构的简化版本如下:
“类别”表
标识 |标题
预算表
category_id |预算日期 (2017-06) |金额
交易表
标识 | ... |日期(2017-06-17) |类别 ID |流出 |流入
您对如何在此处进行操作有任何想法吗?我希望我没有忽略类似的问题,但我什至不确定我在寻找什么。我只需要找到一种方法来正确计算每个月的可用预算,无论超支/预算超支在历史上有多远。
非常感谢您。
编辑:我已经添加了我构建的查询,但它似乎不起作用,它提供了错误的结果。知道如何改进它吗?
SELECT category AS category_id,
SUM(outflow) AS outflows,
SUM(inflow) AS inflows,
SUM(amount) AS amounts,
SUM(amount) - SUM(inflow) - SUM(outflow) AS total
FROM transactions
LEFT JOIN budgets ON (transactions.category = budgets.cat_id
AND DATE_FORMAT(transactions.date, "%Y-%m") =
DATE_FORMAT(budgets.date, "%Y-%m"))
WHERE DATE_FORMAT(transactions.date, "%Y-%m") < "' . $date . '"
GROUP BY transactions.category ASC
【问题讨论】:
-
您需要计算所欠的“净额”(负数或正数),并将其应用于该月的可用资金。
-
您可以按类别进行查询,获取所有交易的总和。如果您加入预算并乘以月数,他们是否在一个月内过度/不足并不重要 - 因为他们会平衡以表明他们在哪里违反预算。您还可以进行 2 个查询:过去几个月和当前月份以显示当前与历史记录。
-
@SloanThrasher 谢谢。我已经尝试了一切,但它似乎不像我构建查询的方式那样工作。你介意看看上面吗?
-
@Rogue 谢谢,我正在尝试,但到目前为止它不起作用......
-
您的查询中有哪些“不起作用”?您能否提供一个示例说明预期的输出以及您目前得到的结果?