猿问

使用Mysql 统计一周数据,若没有数据显示为0

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


像这样,查出近七天的数据了,但是中间没有6和7号的,我要怎么写可以把6号7号的补充为0

慕容森
浏览 2937回答 5
5回答

慕码人2483693

这样的话,你没数据的时候也得生成一条,这样count才能统计的出来吧

幕布斯6054654

建立一个临时的连续日期表,再进行联表查询

神不在的星期二

我每次做这种是 先PHP生成本周数据 值都为0再查询数据库 再合并主要就是range + array_fill + array_combine 之后再合并或者循环替换值 $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)); 我觉得最好的方式应该是添加一个数字辅助表连查 虽然我不会用... PS:这样写真的挺麻烦的, 做统计图表的时候又需要这些值 暂时没找到简单点的方法

MMTTMM

Db::name("数据库名")->where(查询条件)->whereTime('字段','week')->count();
随时随地看视频慕课网APP
我要回答