同一列上的多个where查询


Multiple where queries on same column

我有一个客户数据库,想运行一个查询来显示每月有多少客户有一个活动帐户。

我已经有了下面的代码来计算每个月有多少客户的到期日,但是谁能建议一种方法来计算每个月的到期日>=现在的客户?

<?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; 
?>

简单

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

尽量避免mysql_*函数,因为它们是被弃用的。请使用mysqli_* functions或PDO statements

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

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月)。

您应该查看日期和时间函数以及group by/aggregate函数以获取更多信息。

此查询显示在现在之后有多少客户已过期。更正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等。