gpt4 book ai didi

mysql - 在数据库中存储过期信用?

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:47 25 4
gpt4 key购买 nike

在用户表中使用额外的列可以很容易地存储用户信用,例如user_credits ,现在是一个额外的要求

  • 对于添加到 user_credits 的每个学分col,如果不食用,一年后会自动过期。

当然我需要一个额外的表来存储过期信息,例如

[table credits_history]
user_id
credits
used
created_at

所以,在消费积分的时候,我需要

  • 检查user_credits是否够吃
  • 循环所有credits_history用户信用表used = 0 AND now - created_at < 1yr , 并设置 used to 1
  • 更新user_credits

最后我需要设置一个每日 cron 作业来更新 user_credits通过查看 created_at

上述做法合理吗?或者有什么标准方法可以处理上述要求?

最佳答案

不要存储您可以计算的东西,除非它的计算成本太高。假设每个用户 credits_history 中的行数不太高,您可以按照检查可用信用总和的方式构建查询:

SELECT SUM(credits-consumed) -- see more about "consumed" below
FROM credits_history
WHERE user_id=?
AND created_at >= DATE_SUB(NOW(),INTERVAL 1 YEAR)

这种方法的一个好处是您不再需要 cron 作业来维护 user_credits

使用积分变得有点棘手:您需要添加一个列来显示已使用的积分部分。这里有一个例子来说明这一点。假设用户在他的历史记录中添加了这些信用:

created_on credits consumed
---------- ------- --------
05/06/2014 50 0
07/12/2014 70 0
12/01/2014 40 0

如果您运行上面的查询,您将得到 160 的总和。

现在他要消耗90个积分。您的代码应该查询所有符合条件的信用记录,将它们从最旧到最新排序,并根据需要使用尽可能多的信用来支付所需的金额(即 90)

created_on credits consumed
---------- ------- --------
05/06/2014 50 50
07/12/2014 70 40
12/01/2014 40 0

现在上面的查询将得到 70 的总和。

关于mysql - 在数据库中存储过期信用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30066493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com