开发者社区> 问答> 正文

请教关于建表的问题,希望大家多少能给个提示:报错

我有这么一个需求:要求记录用户扣量的记录,根据用户使用情况来扣量,用多少扣多少,没有特别的情况

建个表:shiyong
为了方便查看,这里我只拿一个用户a来举例

用户 扣量 时间
a 0.2 2014-01-12 10:41:09
a 0.1 2014-01-12 10:41:12
a 0.3 2014-01-12 12:41:12
a 0.1 2014-01-13 22:41:12

建个表:liwu
还有一个表,专门记赠送A的费用记录,但是赠送的记录有这么一条规则“只能在使用期限内有效”,如果超过了时间则无效

有效时间:5,表示5天

用户 收到 时间 有效时间
a 20 2014-01-12 10:41:09 5
a 5 2014-02-20 10:41:09 30

那么,这里就有这么几个情况:
  • a没有收到过赠送,这个好算:`shiyong`.`扣量`的总和
  • a收到过赠送,在有效期内刚好抵扣完,这个也好算:`shiyong`.`扣量`的总和-`liwu`.`收到`
  • 最难算的应该是下面这种情况了:
    如果用户在13年-14年不间断的增加扣量
    前半年没收到任何赠送
    后半年不间断陆续收到赠送
    有的有效期短,只有2天,有的有30天等不同有效期、不同抵扣量
    有的赠送在有效期内全部使用完,有的赠送在有效期内只用了一部分

提问,上诉最后一种情况,该怎么处理呢?一条一条的遍历吗?
上面只举了一个用户一年的使用量,如果有N个用户,2、3年的记录,那效率不是相当低下?

展开
收起
kun坤 2020-06-12 22:22:12 380 0
1 条回答
写回答
取消 提交回答
  • 楼主标题是问建表,后面的问题好像是问算法了哦。算法方面的话建议,将赠送表按时间建立线段树(有个隐患,当两个赠送时间有重叠的时候,拆分为3个赠送方便处理 ),再将使用量投入相应节点计算总和,最后遍历树就知道最终结果了。算法复杂度:O(n) = N*log(N) 大概这样吧。用存储过程效率好一点。

    2020-06-12 22:22:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载