我正在开发一个应用程序,其中我们有三种不同的订阅计划(我们称之为小型、标准、高级),每种计划都有三种不同的长度(30、60 和 90 天)。每个用户可以订阅多项服务。
我有下表(简化):
**services**
id, name
**user_services**
user_id, service_id
**service_plans**
id, service_id, days, price
**payments**
id, user_id, service_id, service_plan_id, amount, created_at
我想使用付款历史记录来查找每个服务订阅的剩余天数,但当我意识到用户可能在当前服务到期之前购买两个相同的服务计划或服务时,我遇到了问题。
假设用户在以下日期购买了属于同一服务的两个服务计划:
payments
id | user_id | service_id | service_plan_id | amount | created_at
1 | 1 | 1 | 1 | 40.00 | 2014-06-10 12:23:56
2 | 1 | 1 | 2 | 65.00 | 2014-06-15 12:27:11
服务计划如下(简化):
服务计划
id | service_id | days | price
1 | 1 | 30 | 40.00
2 | 1 | 60 | 65.00
现在假设今天的日期是:
2014-07-09
那么今天,用户距离第一次付款还有 1 天的时间。而由于另一笔付款是针对同一服务的(虽然晚了5天),根本还没有生效,所以剩余天数应该是61天。
我一直在摸索这个问题,但找不到任何类似的问题。任何人都可以阐明并提出 SQL 解决方案吗?也许我在这里使用了错误的模型,存储了错误的东西?
// 卡尔-大卫