1

我有一个客户数据库,并希望运行一个查询以显示每月有多少客户拥有活跃帐户。

我已经有以下内容来计算每个月有多少客户有到期日,但是任何人都可以建议一种方法来计算每个月到期日 >= 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; 
?>
4

3 回答 3

0

下面将告诉您有许多客户在今天或之后每个月的记录都有到期日。

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

请注意,由于这些仅按月分组,跨越多年的记录可能会产生误导(例如,2013 年 7 月 3 日和 2014 年 7 月 7 日都算作 7 月)。

您应该查看日期和时间函数以及按/聚合函数分组以获取更多信息。

于 2013-06-20T10:14:40.283 回答
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 等。

于 2013-06-20T10:11:52.660 回答
0

简单的

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

尽量避免使用mysql _* 函数,因为它们已被贬低。而是使用mysqli _* 函数或PDO语句

于 2013-06-20T10:05:48.017 回答