2016-04-11 9 views
0

私は、次のクエリがあります塗りつぶし行方不明日付

select date(updated_at) as data, COUNT(id) as numar 
from `coupons` 
where `user_id` = 5 and `won_by` != 0 and `updated_at` >= '2016-04-01' 
group by DAY(updated_at), month(updated_at), year(updated_at) 

をし、結果がこれです:

2016-04-01- 229 
2016-04-02- 0 
2016-04-03- 30 
2016-04-04- 6 
2016-04-05- 0 
2016-04-06- 0 
2016-04-07- 1 
2016-04-08- 1 
2016-04-10- 1 
:私はこのような何かを受け取るために何ができるか

2016-04-01- 229 
2016-04-03- 30 
2016-04-04- 6 
2016-04-07- 1 
2016-04-08- 1 
2016-04-10- 1 

+0

なぜないあなた 'GROUP日付BY(updated_atの)':その時点で

が、それは単に左が0にNULLを変換するためにCASE文で、date_joinとあなたの最初の質問の参加ですか? –

答えて

1

これを行う最良の方法は、すべてのdatを含む1つの列を持つ2次表を作成(および維持)することですあなたが気にしていること。次のようなものがあります。

CREATE TABLE date_join( 日付がNULLではないプライマリキー );

次に、各日付のレコードを便利な方法で(日常の処理の一部として、ストアード・プロシージャーなどを使用して、手動で)挿入します。

SELECT dj.date, q.numar 
    FROM  date_join dj 
    LEFT JOIN (select date(updated_at) as date, COUNT(id) as numar 
       from `coupons` 
       where `user_id` = 5 and `won_by` != 0 and `updated_at` >= '2016-04-01' 
       group by DATE(updated_at) 
      ) q 
     ON dj.date = q.date 
    ORDER BY dj.date; 
+0

100K日付(200+年)のテーブルは、MySQLで約2.5MBを消費します。あなたの人生でそれを維持する必要はありません:-) –

+0

魅力のように働く!どうもありがとうございました –

関連する問題