我想创建一个简单的订阅基础上的帐户管理的PHP和MySQL驱动的网站。我需要跟踪某些类型的用户帐户和订阅的长度。我希望用户能够选择一个“订阅包”(青铜,银,黄金)和时间周期(一个星期,一个月,一年),他希望他的订阅持续。
然而,评级较高的订阅(金>银>青铜)应优先于低评级的。这就是说,如果用户同时有银和金的认购,显然应该先使用黄金认购的时限,而且只有在用完的时候才使用。
为了在内部存储订阅,我创建了一个表:
INT id
INT user_id
INT type
DATETIME start
DATETIME end我的问题是:如何才能确定用户帐户是否在某一时刻有一个有效的订阅,以及该订阅是什么类型?最重要的是,当已经有一个订阅运行时,我会对如何动态添加更多的订阅感兴趣。。
更精确的例子:
。
最好是,我想在MySQL查询中完成大部分工作,但我不确定这是否可能。如果所有这些都失败了,我将不得不求助于PHP。
耽误您时间,实在对不起!
发布于 2012-05-10 16:14:13
首先,要查找当前有效订阅,您的查询应该构建如下:
$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); }https://stackoverflow.com/questions/10536453
复制相似问题