0

日付範囲からの毎日のレベルに基づいて、すべてのクリックをカウントしたいと考えています。

「2013-05-01」から「2013-05-30」までのすべてのクリックをカウントし、次の結果を次のようにしたいとします。

date            clicks
2013-05-01      50
2013-05-02      60
2013-05-03      65
2013-05-04      0
etc...

現時点では、次のSQL呼び出しがあります

SELECT count(date) as clicks, date FROM views WHERE uid = $id group by date ORDER BY date DESC

これは正常に機能しています。唯一の問題は、日付範囲内のすべての日を取得するのではなく、クリックがある日だけを取得することです。クリック数が 0 日でも、すべての日を取得できるはずです。

誰かが助けてくれることを願っています

4

5 に答える 5

3

クリックがあった日のみ結果が得られるため、クリックがなかった日は結果が得られません。どちらかにする必要があります

A) 日付のリストを生成し、各日のクリック数を返します。SQL Serverに似ています: 数日間データが存在しない場合でも、日付範囲内のすべての日を選択する方法

B) 結果の行を出力に使用する代わりに、PHP で毎日を列挙し、その日が SQL 結果セットに見つからない場合は、出力に 0 エントリを挿入します。date_addを使用して、一度に 1 日を期間の開始に追加し、日付をDateTime含む文字列としてフォーマットして、結果の日付と照合することができます。

于 2013-05-14T09:51:40.630 に答える
0

句を使用してみてくださいBETWEEN...

SELECT * FROM table_name WHERE column_name BETWEEN start_date AND end_date
于 2013-05-14T09:47:38.450 に答える
0

現在、日付範囲の値を取得しているため、このようにしてみてください。

SELECT count(date) as clicks, date FROM views 
WHERE uid = $id AND date BETWEEN $from_dt AND $to_dt 
group by date ORDER BY date DESC;

また、このクエリは、テーブルに特定の日付のレコードがある場合にのみカウントを返します。

于 2013-05-14T09:48:52.350 に答える
0
SELECT count(date) as clicks, date 
FROM views 
WHERE uid = $id
  AND date between 'date1' and 'date2'
group by DAY(date)
ORDER BY date DESC
于 2013-05-14T09:50:25.510 に答える
0

これを試して:

select sum(clicks) as total_clicks,date from views where uid='$id' AND (date BETWEEN $from_dt AND $to_dt) group by date order by date desc
于 2013-05-14T09:56:15.513 に答える