0

グラフを作成するために、毎日の投稿数を数えたいです。私の問題は、SQLが数日間結果を検出しないため(カウントが0)、グラフに必要な行が欠落していることです(投稿のない日を表示したいため)。

SELECT DATE(Date) AS Day, COUNT(*) AS COUNT 
FROM `Posts` 
GROUP By `Day`
ORDER BY Date DESC

while($row = mysql_fetch_array($result)) {
    echo $row['Date'] . ": " . $row['Count'];
    }

ループには結果が0の日が表示されないため、水曜日に投稿がない場合は、次のようになりますmonday-17-3: 5, tuesday-18-3: 2, thursday-20-3: 3。代わりに、空白を埋めたいので、次のようになりますwednesday-19-3: 0

ループに結果がない日をエコーするにはどうすればよいですか?

4

2 に答える 2

2

これを回避するには、日付のテーブルを実行しOUTER JOIN、を実行してから、グループ化を実行します。これにより、その間の日付が提供されます(免責事項:日付はYYYY-MM-DDの形式であると想定しています。そうでない場合は、JOINステートメントを微調整する必要があります)。

SELECT A.Date AS Day, COUNT(Posts.Date) AS COUNT 
FROM 
   (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) A
LEFT OUTER JOIN `Posts` ON A.Date = `Posts`.`Date`
WHERE A.Date >= DATE_ADD(CURDATE(), INTERVAL -15 DAY)
GROUP BY A.Date

日付テーブルには、次の投稿の方法を使用しています。日付範囲から日を生成します

于 2012-04-24T04:49:55.843 に答える
0

次のような関数を使用して、ループを使用して連続する日付を調べます。

$date = strtotime(date("Y-m-d", strtotime($date)) . " +1 day");

サイクルごとに、クエリ結果を適用します。次に、すべての日付が表示されます。

于 2012-04-24T04:50:59.923 に答える