鍍金池/ 問答/PHP  數據庫/ mysql 關于用戶賬目明細設計的問題

mysql 關于用戶賬目明細設計的問題

本期余額=上次余額+收入-支出

怎么能讓明細的表現變成這種的

時間 ----------- 交易類型 ---- 收入/支出 ---- 可用余額

2018-03-13 ---- 購買 ---------- -100 ---------- 270
2018-03-12 ---- 出售 ------------ 50 ----------- 370
2018-03-11 ---- 充值 ------------ 50 ----------- 320
2018-03-10 ---- 購買 ----------- -30 ----------- 270
2018-03-09 ---- 充值 ----------- 300 ---------- 300

流水表結構是這樣的。

用戶id --- 時間 ----------- 交易類型 ------ 操作類型 ----- 變動金額
----1 -----2018-03-09 ------ 充值 ------------ 收入---------- 300
----1 -----2018-03-10 ------ 購買 ------------ 支出---------- 30
----1 -----2019-03-11 ------ 充值 ------------ 收入---------- 50
----1 -----2019-03-12 ------ 出售 ------------ 支出---------- 50
----1 -----2019-03-13 ------ 購買 ------------ 支出---------- 100

不用單獨記錄這種余額字段,可用余額就是統(tǒng)計出來的。

有經驗的朋友指點一下好嗎?現在就是不知道怎么統(tǒng)計出這種效果。

回答
編輯回答
痞性
  1. 數據庫里流水表記錄金額變動的時候就記錄好當時的余額。既能實現你這個功能,也方便審計
  2. 不動數據庫的話,先查出所有的明細,然后根據類型自己計算出來每一筆對應的余額。

其他的想不到了,或者可以兩個結合,按日期分段來記錄余額,查詢的時候只要算少量的流水就能算出來,感覺沒什么必要

2017年7月3日 14:14
編輯回答
久舊酒

我覺得還是需要在記錄每一筆交易記錄的同時,把當前余額也記錄下來會比較好。

下面來說你這種情況:

計算公式就是:

某條交易記錄余額 = 當前余額 - (某條交易記錄時間點 ~ 現在時間點之間的充值金額總和) + (某條交易記錄時間點 ~ 當前時間點之間的消費記錄總和)

以上只是操作類型為簡單的增加減少的時候。

這種方式,在時時統(tǒng)計的時候,效率還是太慢了。建議還是需要加一個交易余額的字段。


書接上文,大兄弟你也太糾結了...

其實你給出的兩種情況,自己取舍一下就知道哪種快速、直接了。

你有消費(充值或者支出)的時候,計算完當前余額,拿著你的這個余額,更新你的用戶表余額。

然后再用你的這個余額,直接放在消費記錄里插入就好了。
維護起來比起你時時統(tǒng)計的要簡單多了。

2018年4月11日 10:37
編輯回答
久舊酒

我還在另外一個表里面有個 總余額字段,這里明細這里再記錄個余額字段,感覺有點別扭。

你們都怎么做的呢?

比如我更新另外一個余額表字段,這個明細里面的余額也要更新一次嗎?

用戶交易明細表

用戶id 時間 交易類型 操作類型 變動金額 當前余額
1 2018-03-09 充值 收入 300 300
1 2018-03-10 購買 支出 30 270
1 2019-03-11 充值 收入 50 330
1 2019-03-12 出售 收入 50 380
1 2019-03-13 轉賬 支出 200 180

我還有另外一個表是記錄余額的,與用戶基礎信息表是1對1關系。

用戶余額表

用戶id 余額
1 180
2 200
3 100

如果按照我這種設計有問題嗎? 兩個表都有余額。

比如我現在要做一個操作,用戶id=1 轉賬-100,給用戶id=2。

那我要先去 用戶余額表,進行給用戶id=1,扣除100,更新成新的余額。

然后,我要 去交易明細表 插入一個交易記錄,id=1,轉賬類型,支出,100,

再計算一下,當前余額。

現在計算有兩種辦法,

一種是用 用戶余額表里面的id=1的余額,減去 100,更新給 交易明細表 的當前余額字段。
另一種是,去交易明細表 找上一條交易明細的當前余額值,再扣除 100 ,更新給這個新的交易明細。

問題來了?我該怎么做呢?用哪種方式更新,這個新交易明細里的 當前余額。

同時我還要操作id=2的用戶,他要增加 100,上面的操作,還要再來一遍。

感覺好復雜,感覺控制不好,就要出錯。

按照我這種設計,有毛病嗎?你們都怎么做的呢?

這要維護 兩個表的余額字段,不能出錯。好處是查詢快?不用復雜的sql語句統(tǒng)計?

如果不加這個當前余額,用sql語句自動算出來返回給php結果集,這種效率低?

怎么取舍???

2017年3月25日 18:23