29

ユーザーのデータベースがあります。ユーザーベースの成長に基づいてグラフを作成したいと思います。私が今持っているクエリは次のとおりです。

SELECT DATE(datecreated), count(*) AS number FROM users 
WHERE DATE(datecreated) > '2009-06-21' AND DATE(datecreated) <= DATE(NOW())
GROUP BY DATE(datecreated) ORDER BY datecreated ASC

これは、私が望むものをほとんど返します。ある日に 0 ユーザーを取得した場合、その日は 0 値として返されず、単にスキップされ、少なくとも 1 人のユーザーがいる翌日が返されます。(疑似応答)のようなものを取得するにはどうすればよいですか:

date1 5
date2 8
date3 0
date4 0
date5 9
etc...

ゼロの日付は、残りの日付とともに順番に表示されますか?

ありがとう!

4

6 に答える 6

5

この質問は、私が思うのと同じことを尋ねます。一般的に受け入れられている答えは、アプリケーションロジックでそれを行う(配列にあるものを読み込んでから、配列をループして不足している日付を作成する)か、必要な日付で満たされた一時テーブルを使用することです。加入。

于 2009-06-26T00:40:41.350 に答える
1

テーブルに右外部結合を行い、それを tblCalendar と呼びます。これには、レポートする日付が事前に入力されています。そして、日付フィールドに参加します。

ポール

于 2009-06-26T00:45:36.643 に答える
0

さらに考えてみると、次のようなものが必要です。

CREATE TEMPORARY TABLE DateSummary1 ( datenew timestamp ) SELECT DISTINCT(DATE(datecreated)) as datenew FROM users;

CREATE TEMPORARY TABLE DateSummary2 ( datenew timestamp, number int ) SELECT DATE(datecreated) as datenew, count(*) AS number FROM users 
WHERE DATE(datecreated) > '2009-06-21' AND DATE(datecreated) <= DATE(NOW())
GROUP BY DATE(datecreated) ORDER BY datecreated ASC;

SELECT ds1.datenew,ds2.number FROM DateSummary1 ds1 LEFT JOIN DateSummary2 ds2 on ds1.datenew=ds2.datenew;

これにより、最初のテーブルにすべての日付が表示さcountれ、2 番目のテーブルに要約データが表示されます。または類似のものds2.numberに置き換える必要があるかもしれません。IF(ISNULL(ds2.number),0,ds2.number)

于 2009-06-26T01:18:46.390 に答える