gpt4 book ai didi

php - 使用 PHP 和 MySQL 进行基于订阅的帐户管理,添加时间跨度?

转载 作者:可可西里 更新时间:2023-11-01 07:35:44 24 4
gpt4 key购买 nike

我想在 PHP 和 MySQL 驱动的网站上创建一个简单的基于订阅的帐户管理。我需要跟踪某些类型的用户帐户和订阅的长度。我希望用户能够选择一个“订阅包”(青铜、白银、黄金)和他希望订阅持续的时间跨度(一周、一个月、一年)。

但是,评级较高的订阅(金 > 银 > 铜)应优先于评级较低的订阅。这意味着,如果用户同时拥有白银和黄金订阅,显然应该首先使用黄金订阅的时间跨度,并且只有在用完时才使用白银订阅。

为了在内部存储订阅,我创建了一个表:

INT id
INT user_id
INT type
DATETIME start
DATETIME end

我的问题是:我如何才能及时查明某个用户帐户在特定时刻是否具有有效订阅以及该订阅是什么类型?最重要的是,我会对如何在已经有一个订阅运行时动态添加更多订阅感兴趣。

更精确的例子:

  • 用户在第 1 天购买了 5 天的青铜 -> 订阅“青铜”从第 1-5 天运行。
  • 在第 2 天,用户决定他还想要“白银”并再购买 5 天的白银
  • 现在的情况:铜牌(第 1 天)、银牌(第 2-6 天)、铜牌(第 7-10 天)

最好,我想在 MySQL 查询中完成大部分工作,但我不确定这是否可能。如果一切都失败了,我将不得不求助于 PHP。

感谢您的宝贵时间!

最佳答案

首先,要找到当前有效的订阅,您的查询应该构造如下:

$query = "SELECT * ".
"FROM subscriptions_table ".
"WHERE user_id = $user_id ".
" AND start < '" . date("Y-m-d") ." 23:59:59' ".
" AND end > '" . date("Y-m-d") ." 00:00:00' ".
"ORDER BY type";
$results = mysql_query($query);

这将为您提供订阅的每日粒度。如果你想精确到分钟,那就把时间去掉,把日期格式调整为date("Y-m-d H:i:s")

此处的结果将是该用户的订阅数组,最高类型在前。为了评估要显示的层,您可以只使用第一个结果,您可以通过 $subscriptionRow = mysql_fetch_array($results);

找到

当发生购买时,您需要做更多的事情。基本上,遍历每个现有订阅并相应地调整时间。确保您没有在这段代码之前使用上面的 $subscriptionRow 赋值:

$adjustmentQueries = array();
while ($subscriptionRow = mysql_fetch_array($results))
{
if ($subscriptionRow['type'] > $purchaseType) { } //do nothing
else
{
$newDate = date("Y-m-d H:i:s", strtotime("+".$intNumDaysPurchased." days", strtotime($subscriptionRow['end'])));
$adjustmentQueries[] = "UPDATE subscriptions_table SET end = '$newEndDate' WHERE id=$subscriptionRow['id']";
}
}

foreach ($adjustmentQueries as $adjQuery) { mysql_query($adjQuery); }

关于php - 使用 PHP 和 MySQL 进行基于订阅的帐户管理,添加时间跨度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536453/

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