ようこそダグ!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 で処理を引き継ぐ必要があります。事前に日の配列を作成し、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);