鍍金池/ 問答/PHP/ 使用Mysql 統(tǒng)計一周數(shù)據(jù),若沒有數(shù)據(jù)顯示為0

使用Mysql 統(tǒng)計一周數(shù)據(jù),若沒有數(shù)據(jù)顯示為0

SELECT time,count(*) as count FROM share WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY)<DATE(time) GROUP BY time

clipboard.png
像這樣,查出近七天的數(shù)據(jù)了,但是中間沒有6和7號的,我要怎么寫可以把6號7號的補充為0

回答
編輯回答
乞許

@火蜥蜴 的意思是 你數(shù)據(jù)庫根據(jù)分組取出一周統(tǒng)計的數(shù)據(jù),然后再遍歷日期。比如你給的例子:

統(tǒng)計數(shù)據(jù)數(shù)組是:

$result = [
    '2018-01-03' => 5,
    '2018-01-04' => 1,
    '2018-01-05' => 3,
    '2018-01-08' => 3,
    '2018-01-09' => 1,
];

然后你的一周日期數(shù)組是:

$date_list = ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07'];

循環(huán)$date_list數(shù)組,值與$result的下標(biāo)對應(yīng),有的話取出count,沒有的話輸出0就行了。

2017年1月4日 17:14
編輯回答
薄荷綠

Db::name("數(shù)據(jù)庫名")->where(查詢條件)->whereTime('字段','week')->count();

2017年2月19日 00:12
編輯回答
涼薄

在前端顯示的時候遍歷判斷一下即可

2018年9月6日 17:33
編輯回答
兮顏

建立一個臨時的連續(xù)日期表,再進行聯(lián)表查詢

2017年9月24日 03:24
編輯回答
初心

我每次做這種是 先PHP生成本周數(shù)據(jù) 值都為0
再查詢數(shù)據(jù)庫 再合并
主要就是range + array_fill + array_combine 之后再合并或者循環(huán)替換值

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

$keys = array_map(function ($time) {
    return date("Y-m-d", $time);
}, range($begin_time, $end_time, 24 * 3600));

$initData = array_combine($keys, array_fill(0, count($keys), 0));

我覺得最好的方式應(yīng)該是添加一個數(shù)字輔助表連查 雖然我不會用...

PS:這樣寫真的挺麻煩的, 做統(tǒng)計圖表的時候又需要這些值 暫時沒找到簡單點的方法

2017年11月18日 13:46
編輯回答
陌璃

這樣的話,你沒數(shù)據(jù)的時候也得生成一條,這樣count才能統(tǒng)計的出來吧

2017年9月1日 10:09