MySQL:根据付款计算订阅的剩余天数

2023-12-27

我正在开发一个应用程序,其中我们有三种不同的订阅计划(我们称之为小型、标准、高级),每种计划都有三种不同的长度(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 解决方案吗?也许我在这里使用了错误的模型,存储了错误的东西?

// 卡尔-大卫


我建议您没有在表中存储足够的数据。

与现在一样,您始终需要查看之前的每笔付款,以确定当前付款是否处于活动状态或正在等待激活,这会导致性能下降和查询更加复杂。

计算出的expires_at列为payments,这是通过添加新付款计算出来的MAX(payments.expires_at) + INTERVAL service_plans.days DAYS将允许您通过仅查看一行来计算剩余天数..以及用户是否在计划中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL:根据付款计算订阅的剩余天数 的相关文章

随机推荐

  • 在viewpager中可以实现这种效果吗?

    我在用ViewPager in Activity 我需要在页面翻转之间产生这种效果 除了在 Android 的主屏幕之间切换之外 我从未见过这样的效果 如果您使用过这个动画或者您听说过动画的名字 请帮助我 我对这部动画没有任何想法 这种效应
  • 如何调试 linq to sql InsertOnSubmit 语句?

    以下代码可以正常工作 db DBUsers InsertOnSubmit new DBUser AllTheStuff valuesBeyondYourWildestDreams db SubmitChanges 我的猜测是数据库发生了一些
  • Ruby:过滤哈希键的最简单方法?

    我有一个看起来像这样的哈希 params irrelevant gt A String choice1 gt Oh look another one choice2 gt Even more strings choice3 gt But w
  • 使用curl获取标头

    为什么这不起作用 curl X HEAD http www google com 但这些都工作得很好 curl I http www google com curl X GET http www google com 您需要将 i 标志添加
  • Android,广播可分包数据

    我已经实现了一个扩展NotificationListenerService 的类 它可以很好地接收发布的通知 然后我想获取收到的 statusBarNotification 对象并广播它 我会做以下事情 Override public vo
  • 在终端中运行 Swift 构建会导致“平台路径”错误

    我最近重新格式化了我的 Mac 今天我尝试通过终端构建一个 swift 可执行文件来启动服务器端 swift 项目 以下是我使用过的命令 swift package init type 可执行文件 快速构建 运行时swift build 我
  • 如何限制 matplotlib 图形的边框大小?

    我正在制作一些相当大的图表 边框中的空白占用了很多像素 这些像素可以更好地被数据使用 看起来边界随着图形的增长而增长 以下是我的图形代码的核心内容 import matplotlib from pylab import figure fig
  • 类型级编程中的协方差

    我正在尝试创建与 Scala 库中的元组等效的类型元组 仅使用 方法通过添加第 N 1 个值将元组扩展为元组 这样我就能够递归地构造元组 class Test abstract class Tuple protected type Next
  • 应用黑白不透明度后生成颜色

    我什至不知道如何描述我想要什么 但就是这样 假设我有 3 个文本框 我在第一个文本框中输入一些颜色十六进制代码 我想在其顶部应用黑色图层 并将不透明度设置为 50 并在第二个文本框中获取结果颜色 同样的事情 但第三个是白色的 让我解释一下
  • 使用 Querydsl 在 Spring 中仅选择特定列?

    假设我有一个名为Employee有 70 列 我如何实现查询SELECT id from t employee in spring querydsl无需修改此代码中的大量代码 BooleanExpression paramEmployee
  • 如何将两个图像视图从中心动画到彼此相对?

    我想将两个图像从屏幕中间动画化为彼此相对 就像下图一样 到目前为止我所做的一切现在我只能从左到右为一张图像制作动画 反之亦然 但现在我想从中间为它们制作动画 这是我的代码 b1 Button findViewById R id button
  • 如何将 React-native-google-mobile-ads 与 Expo 和 Expo Go 结合使用?

    如何将 React native google mobile ads 与 Expo 和 Expo Go 结合使用 例如横幅广告 非常感谢世博会背景下的一个最小例子 截至 2022 年 5 月 所有在线 Google 文档均引用 expo a
  • SQL中将一个表的所有值插入到另一个表中

    我正在尝试将一个表的所有值插入到另一个表中 但是插入语句接受值 但我希望它接受来自initial Table 的 select 这可能吗 insert 语句实际上有一个语法可以做到这一点 如果您指定列名称而不是选择 那么会容易得多 INSE
  • 基于语言的安装描述

    众所周知 一旦您在 Joomla 后端安装了扩展 就会显示描述 您可以使用 XML 中的简单描述 也可以使用基于语言的描述 过去我在基于语言的描述方面从未遇到过问题 但这次我遇到了 该扩展是一个管理组件 没有前端文件夹 适用于 Joomla
  • 类型同义词导致类型错误

    作为我之前问题的后续一起使用 makeLenses 类约束和类型同义词 https stackoverflow com questions 30582583 using makelenses class constraints and ty
  • GWT 调用 DOM.getElementById 不会导致 NullPointerException

    我们的应用程序中有一部分可以执行此操作 int x DOM getElementById x getPropertyInt value int y DOM getElementById y getPropertyInt value int
  • 全局符号需要显式的包名称

    全局符号需要显式的包名称吗 为什么会发生这种情况以及可能导致此错误的各种情况是什么 当前面的语句不完整时也可能发生这种情况 use strict sub test test some comment my x perl 现在抱怨以下错误消息
  • 如何基于DataKey在ASP.NET GridView中设置选定行?

    我想要类似于以下伪代码的内容 myGridView SelectedIndex myGridView DataKeys IndexOf mySpecificKey 我已经做了一些智能感知探索 但我还没有找到明显的方法来做到这一点 如果找不到
  • 在 jQuery UI 日期选择器中标记选定的日期

    我正在使用 jQuery UI 的日期选择器 http docs jquery com UI Datepicker 听起来应该可以通过提供一个来标记某些日子beforeShowDay函数 http docs jquery com UI Da
  • MySQL:根据付款计算订阅的剩余天数

    我正在开发一个应用程序 其中我们有三种不同的订阅计划 我们称之为小型 标准 高级 每种计划都有三种不同的长度 30 60 和 90 天 每个用户可以订阅多项服务 我有下表 简化 services id name user services