欢迎道格!我在本地运行了您的 SQL 的修改版本,即使对于那些 NULL 日期,我也得到了结果。首先要做的事情是实时将 null 转换为其他值(“将 null 转换为 0”),您需要使用 MySQL 语句IF,如果您了解 Oracle,它很像DECODE
命令。NULL 值自动评估为 false,因此您可以简单地编写:
SELECT IF(date_created,date_created,0) FROM sometable
当然...... 0 不再是日期,然后 NULL 是。我发现该DAYNAME
函数只是传递 NULL 日期供您处理:
SELECT DAYNAME(date_created) day,COUNT(*) my_count
FROM sometable
WHERE date_created IS NULL OR
(date_created>='2010-10-20 21:02:38' AND date_created <= '2010-10-27 21:02:38')
GROUP BY DAY(date_created)
我从中得到的(使用示例数据集)是 8 个值day
:一周中的 7 天 + NULL(有计数)。这有点道理......你不能将未知日期转换为一周中的某一天。
@
除非我误解了您的目的,否则这可能是您在 SQL 中的错误标志。
更新
根据您的最后评论,您需要接管 PHP 中的处理。事先构建 days 数组,然后将 MySQL 数据添加到现有数组中,以便所有天都在那里(并且按顺序)。
来源:PHP 中的天数计算
//You may not even need "date_created IS NULL OR" in the where statement
$sql="SELECT DAYNAME(date_created) day,COUNT(*) my_count
FROM sometable
WHERE date_created IS NULL OR
(date_created>='2010-10-20 21:02:38'
AND date_created <= '2010-10-27 21:02:38')
GROUP BY DAY(date_created)";
//We're assuming you've setup a MySQL connection in $conn
$result = @mysql_query($sql, $conn) or die(mysql_error());
//Starting data - Zero for every day
$days=array("Sunday"=>0,"Monday"=>0,"Tuesday"=>0,"Wednesday"=>0,
"Thursday"=>0,"Friday"=>0,"Saturday"=>0);
while($row = mysql_fetch_array($result)) {
$days[$row["day"]]+=$row["my_count"];
}
mysql_free_result($result);
//Preview the output
print_r($days);