2013-06-20 42 views
1

我有一個客戶的數據庫,並希望運行一個查詢,以顯示有多少客戶有月活躍帳戶的基礎上。多個在同一列查詢

我已經有了以下幾個數來計算每個月有多少客戶有一個到期日期,但是有沒有人可以建議一種方法來計算每個月有expirydate> = now的人?

<?php 
$query = "select count(cid) as num_rows from customers WHERE expirydate LIKE '%-12-%'"; 
$result = mysql_query($query); 
$row = mysql_fetch_object($result); 
$total = $row->num_rows; 
echo "December: " .$total; 
?> 
+1

正如你寫的。有一個SQL函數叫做NOW()' – Fracsi

+0

讀一下mysql的時間和日期函數可能會幫助你:http://dev.mysql.com/doc/refman/5.5/en/date-and- time-functions.html – jammypeach

+0

注意:LIKE子句相當於做'WHERE MONTH(expirydate)= 12'的方式。 – Corbin

回答

0

簡單

mysql_query("select count(cid) as num_rows from customers WHERE expirydate >= curdate()"); 

儘量避免mysql的 _ *功能,因爲它們是depricated。相反使用的mysqli _ *函數或PDO聲明

+0

但是,只計算所有客戶的到期日是當前的 - 是否沒有辦法按月分組? 也就是說。 1月 - 30個活躍客戶等? – user2475770

0

這查詢會告訴您現在有多少客戶已經過期。在您的情況下,在STR_TO_DATE函數中更正您的日期格式。 MySQL STR_TO_DATE

SELECT COUNT(*) as `num_rows`, MONTH(STR_TO_DATE(`expirydate`,'%Y-%m-%d')) as `month` 
FROM `customers` 
WHERE STR_TO_DATE(`expirydate`,'%Y-%m-%d') > NOW() 
GROUP BY `month` 

也可以嘗試在你的表,而不是VARCHAR或等使用時間戳字段類型

+0

我是編輯查詢一點點。嘗試一下。 – DBuTbKa

0

下面將告訴你有很多客戶對上還是今天的記錄後每月expirydate。

SELECT 
    MONTH(expirydate) month, COUNT(cid) as count 
FROM 
    customers 
WHERE 
    DATE(expirydate) >= CURDATE() 
GROUP BY MONTH(expirydate) 

請注意,雖然作爲該組只有一個月,跨越多個年的記錄可能會誤導(2013年7月3日和2014年7月7日將兩者算作七月,例如)。

您應該查看date and time functionsgroup by/aggregate functions瞭解更多信息。

+0

我試過這個,但它只是返回一個空白的結果。到期日期列設置爲日期,格式爲yyyy-mm-dd – user2475770