在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

使用Mysql 統(tǒng)計(jì)一周數(shù)據(jù),若沒(méi)有數(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ù)了,但是中間沒(méi)有6和7號(hào)的,我要怎么寫可以把6號(hào)7號(hào)的補(bǔ)充為0

回答
編輯回答
乞許

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

統(tǒng)計(jì)數(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)對(duì)應(yīng),有的話取出count,沒(méi)有的話輸出0就行了。

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

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

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

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

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

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

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

我每次做這種是 先PHP生成本周數(shù)據(jù) 值都為0
再查詢數(shù)據(jù)庫(kù) 再合并
主要就是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));

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

PS:這樣寫真的挺麻煩的, 做統(tǒng)計(jì)圖表的時(shí)候又需要這些值 暫時(shí)沒(méi)找到簡(jiǎn)單點(diǎn)的方法

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

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

2017年9月1日 10:09