欢迎道格!我在本地运行了您的SQL的修改版本,即使是那些NULL日期,我也会得到结果。首先,要实时将null转换为其他值(“convert null to 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)
我从中得到的(通过一个示例数据集)是day
的8个值:一周中的7天+NULL(带计数)。这有点道理。。。你无法将未知日期转换为一周中的某一天。
这可能是您SQL中错误的@
符号,除非我误解了您的目的。
更新
根据您最后的评论,您需要接管PHP中的处理。提前构建days数组,然后将MySQL数据添加到现有数组中,以便所有的days都在那里(按顺序)。
源: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);