2012-05-10 46 views
3

我想在PHP和MySQL驅動的網站上創建一個簡單的基於訂閱的帳戶管理。我需要跟蹤某些類型的用戶帳戶和訂閱的長度。我希望用戶能夠選擇他想要訂閱的訂閱套餐(青銅,銀,金)和時間範圍(一週,一個月,一年)。基於PHP和MySQL的訂閱賬戶管理,Timespan補充?

但是,較高等級的訂閱(金牌>銀牌>銅牌)應優先於較低等級的訂閱。這意味着,如果用戶應該同時擁有白銀和黃金訂閱,那麼黃金訂閱的時間範圍顯然應首先使用,並且只有在用完時才使用白銀訂閱。

要存儲訂閱內部,我創建了一個表:

INT id 
INT user_id 
INT type 
DATETIME start 
DATETIME end 

我的問題是:我如何才能知道一個用戶帳戶具有有效的預訂在某一時刻,什麼類型的訂閱是什麼?最重要的是,如果已經有一個訂閱runnnig,我將對如何動態添加更多訂閱感興趣。

更精確的例子:

  • 用戶購買第1天5天青銅 - >訂閱 「青銅」 從1-5天運行。
  • 第2天,用戶決定另外需要「銀」,併購買另外5天的現在的情況:現在青銅器(第1天),銀器(第2-6天),青銅器(第7-10天)

最好,我想在MySQL查詢中完成大部分工作,但我不確定這是否可能。如果一切都失敗了,我不得不求助於PHP。

謝謝你的時間!

回答

2

首先,要了解當前有效的訂閱,您的查詢應當建立這樣的:

$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); } 
+0

非常感謝您的回答!對不起,沒有在早些時候報告,但我會嘗試這個週末,並給你反饋:) – Weaz