我正在構建財務預算計劃的應用程序,現在我正在打牆。在應用程序中,用戶應該每個月都要預算他的財務狀況。檢索並處理無限量的數據
他增加了交易 - 收入和支出 - 他將預算分配給他的每個類別,即雜貨500美元。每次他在雜貨上花費的時候,都會從這500美元中扣除。但他也有可能在雜貨上花費超過他的預算(=超支),甚至他甚至可以在他的類別中比他實際上預算更多的錢(=過度預算)。
問題是:我以某種方式需要處理理論上無限量的以前的數據。因爲前幾個月用戶超支或過度預算的一切都需要流血直到今天。這意味着:如果用戶在1月份超過了500美元並且還沒有得到補償,這些500美元仍然需要在6月份削減他的可用預算。
現在通過上個月的數據計算本月的數據並不是一個很大的問題,但是在計算上個月的數據時我只能得到上個月的正確數據。這似乎是無止境的循環。
數據庫結構的簡化版本如下所示:
「類別」 表
ID |標題
收支表
CATEGORY_ID | budget_date(2017-06)|量
事務表
ID | ... |日期(2017-06-17)| category_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
您需要計算欠款(負數或正數)的「淨額」,並將其應用於該月的可用資金。 – Rogue
您可以按類別進行分組,獲得所有交易的總和。無論他們在一個月內是否超支,都是無關緊要的 - 因爲他們會平衡出來,表明他們違反預算 - 如果您加入預算並乘以月數。你也可以做2個查詢:過去的月份和當前的月份,以顯示當前與歷史。 –
@SloanThrasher謝謝。我試過所有的東西,但它看起來不像我構建查詢的方式那樣工作。你介意在上面看一下嗎? – Alexander