2013-11-28 435 views
0

我想返回過去7天的行數的數據集,目前我的結果看起來像這樣;MySQL間隔查詢返回0或NULL

Array 
(
    [0] => Array 
     (
      [count(*)] => 1 
     ) 

    [1] => Array 
     (
      [count(*)] => 2 
     ) 

) 

但是我需要的是,當結果是0天,即顯示0,所以我有7個結果中的順序。

這是我迄今爲止的查詢;

"SELECT count(*) 
    FROM tbl_users 
    WHERE date_sub(curdate(), INTERVAL 7 DAY) <= created 
    AND NOW() >= created 
    GROUP BY date(created)" 

唯一的其他選擇是將「count(*)作爲日期」,其中日期是計數的實際日期。

任何幫助將不勝感激。

+1

做你想做的,你應該有一個表是什麼所有日子和左加入您的時間間隔,並使用SUM而不是COUNT。計數只會爲您桌子上存在的結果帶來結果。說你的時間間隔是從2013-01-01到2013-01-10,你有他們的註冊表:2013-01-01,2013-01-01,2013-01-02,2013-01-03它會導致:2,1,1沒有辦法讓sql知道應該存在01-04,01-05,01-06 ... 01-10 –

+0

如果你能提供一個工作的例子,它將非常棒!我完全困惑在這一個:( –

+0

看看我的回答 –

回答

0

您可以使用MySQL CASE語句,如下所示:

http://dev.mysql.com/doc/refman/5.1/en/case.html

例:

CASE YOUR QUERY 
    WHEN IS NULL THEN 0 
    [ELSE statement_list] 
    END CASE 
+0

謝謝,但我很困惑它將如何進入我的查詢,你能幫忙嗎? –

+0

這不以任何方式解決問題。 –

+0

你是對的。我想我誤解了他的問題。 – greydnls

1

正如我在評論說:你應該有所有天表,左加入你的時間間隔,並使用SUM而不是COUNT。計數只會爲您桌子上存在的結果帶來結果。說你的間隔距離2013-01-01 to 2013-01-10,你有theese登記:

Created 
2013-01-01, 
2013-01-01, 
2013-01-02, 
2013-01-03 

它會導致:2, 1, 1

沒有辦法爲SQL知道應該存在01-04, 01-05, 01-06... 01-10

所以,你必須創建日期的數據並與表格左連接。事情是這樣的:

一些數據例如:

create table tbl_users(
    created date 
); 

insert into tbl_users values 
    ('2013-11-24'), 
    ('2013-11-24'), 
    ('2013-11-25'), 
    ('2013-11-25'), 
    ('2013-11-25'), 
    ('2013-11-26'), 
    ('2013-11-27'), 
    ('2013-11-27'), 
    ('2013-11-27'), 
    ('2013-11-28'), 
    ('2013-11-29'); 


create table alldays (
    dateday date 
); 

--this is just an example to fit the result for today: 2013-11-28 
--this table should have all days for the year 
insert into alldays values 
    ('2013-11-23'), 
    ('2013-11-24'), 
    ('2013-11-25'), 
    ('2013-11-26'), 
    ('2013-11-27'), 
    ('2013-11-28'), 
    ('2013-11-29'), 
    ('2013-11-30'), 
    ('2013-12-01'), 
    ('2013-12-02'), 
    ('2013-12-03'); 

您的查詢應該是:

SELECT a.dateday, sum(if(b.created is null, 0, 1)) 
    FROM alldays a left join tbl_users b on (a.dateday=b.created) 
    WHERE a.dateday >= date_sub(curdate(), INTERVAL 7 DAY) 
    AND a.dateday <= NOW() 
    GROUP BY a.dateday 

見這裏:http://sqlfiddle.com/#!2/cee122/7

+0

+1 upvote on you answer! –