2014-10-30 48 views
3

我在我的數據庫中有一個表,名爲users_added,該表內有一個名爲expire的字段,它存儲了一個unix時間戳。php - 選擇時間與未來日期相同的數據

我的問題是,我可以遍歷X的天數,以及如何看多少天的用戶已經離開(直到到期日期滿足)

例子:

1 day remaining: 
    10 users 

    2 days remaining: 
    0 users 

    3 days remaining 
    50 users 

等等等等。

圖形例如:

enter image description here

這是我到目前爲止有:

// Start date 
    $date = date("Y-m-d",$time); 
    // End date 
    $end_date = date('Y-m-d', strtotime($date . " +10 days")); 



    while (strtotime($date) <= strtotime($end_date)){ 


     $stmt = $dbh->prepare("SELECT * FROM users_added WHERE user_by=:user AND expire<:time"); 
     $stmt->bindParam(":user",$userdata['username']); 
     $stmt->bindParam(":time",$end_date); 
     $stmt->execute(); 
     $expireData = $stmt->fetchAll(); 
     $remaining = $date-$end_date; 
     echo "$remaining"; 
     echo "day(s) remaining:"; 

     $date = date ("Y-m-d", strtotime("+1 day", strtotime($date))); 
    } 

我真的不能再進一步從這裏,因爲我卡住了。我不知道如何做到這一點。

+2

'GROUP BY CEIL((expire - UNIX_TIMESTAMP())/ 86400)'?儘管我通常在表格中避免使用unix時間戳。 (您可能想要添加'WHERE expire> UNIX_TIMESTAMP()',以避免過期的用戶顯示負日子)。 – Wrikken 2014-10-30 19:04:54

回答

7

這爲我工作:

mysql> CREATE TABLE users (expiry INT UNSIGNED); 
Query OK, 0 rows affected (0.12 sec) 

mysql> INSERT INTO users (expiry) VALUES 
     (UNIX_TIMESTAMP() + 1000), 
     (UNIX_TIMESTAMP() + 12348), 
     (UNIX_TIMESTAMP() + 89284), 
     (UNIX_TIMESTAMP() + 99438), 
     (UNIX_TIMESTAMP() + 333552), 
     (UNIX_TIMESTAMP() + 883718), 
     (UNIX_TIMESTAMP() + 994872); 
Query OK, 7 rows affected (0.05 sec) 
Records: 7 Duplicates: 0 Warnings: 0 

mysql> SELECT 
     ROUND((expiry - UNIX_TIMESTAMP())/86400) AS days, 
     COUNT(*) AS cnt 
     FROM users 
     WHERE expiry > UNIX_TIMESTAMP() 
     GROUP BY days; 
+------+-----+ 
| days | cnt | 
+------+-----+ 
| 0 | 2 | 
| 1 | 2 | 
| 4 | 1 | 
| 10 | 1 | 
| 12 | 1 | 
+------+-----+ 
5 rows in set (0.00 sec) 

mysql> 

只是讓數據庫做的工作; subtracting從當前時間戳開始的到期時間戳記給出了到期前秒數,並將其除以86400可以得出天數。然後你可以通過天數group得到每天的計數。

2

我會用while循環產生的可能日期的數組,然後使用一個最大值和最小值之間使用和 第一部分看起來是這樣的運行MySQL查詢:

$date = date("Y-m-d"); 
$expdts = array(); 
$i = 0; 
while($i<=10){ 
    $expdts[] = strtotime($date . " + " . $i . "days"); 
    $i++; 
} 

,然後只是運行一個MySQL查詢:

"SELECT * FROM users_added WHERE expire BETWEEN :time1 AND :time2" 

:time1$expdts[0]:time2$expdts[10] 然後由到期變量對它們進行排序。作爲一個bouns,這可以使用$ expdts數組完成,因爲這個數組中的鍵是時間戳與當前日期相隔多少天。

我還沒有測試過這第一部分。

+0

使用SELECT *查詢我沒有得到任何結果。 – oliverbj 2014-11-05 07:38:14

+0

我測試了它,它適用於我,你是否收到任何錯誤消息? 桌子是什麼樣子? – jacobcc 2014-11-06 04:51:55

相關問題