首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于订阅的帐户管理与PHP & MySQL,时间盘加载项?

基于订阅的帐户管理与PHP & MySQL,时间盘加载项?
EN

Stack Overflow用户
提问于 2012-05-10 14:42:36
回答 1查看 2.6K关注 0票数 4

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

然而,评级较高的订阅(金>银>青铜)应优先于低评级的。这就是说,如果用户同时有银和金的认购,显然应该先使用黄金认购的时限,而且只有在用完的时候才使用。

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

代码语言:javascript
复制
INT id
INT user_id
INT type
DATETIME start
DATETIME end

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

更精确的例子:

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

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

耽误您时间,实在对不起!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-10 16:14:13

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

代码语言:javascript
复制
$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赋值:

代码语言:javascript
复制
$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); }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10536453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档