【发布时间】:2018-08-18 06:29:33
【问题描述】:
我有一个 SQL 表,我从中返回月份和视图。 查询:
function chartData(){
$q=$this->db->select("DATE_FORMAT(insertTime,'%Y-%M') as Month , count(*) as value")
->group_by("DATE_FORMAT(insertTime,'%Y %M')")
->get('users');
return $q->result();
}
EDIT:上面的函数返回这个
Array
(
[0] => stdClass Object
(
[Month] => 2018-August
[value] => 21
)
[1] => stdClass Object
(
[Month] => 2018-October
[value] => 3
)
[2] => stdClass Object
(
[Month] => 2018-September
[value] => 3
)
[3] => stdClass Object
(
[Month] => 2019-January
[value] => 1
)
[4] => stdClass Object
(
[Month] => 2019-October
[value] => 1
)
PHP
$data=$this->users->chartData();
$keys=array();
$values=array();
foreach ($data as $d) {
array_push($keys, $d->Month);
array_push($values, $d->value);
}
$results['keys']=json_encode($keys);
$results['values']=json_encode($values);
print_r($results['keys']);
// returns ["2018-August","2018-October","2018-September","2019-January","2019-October"]
print_r($results['values']);
// returns ["21","3","3","1","1"]
简化形式:
月份:2018 年 8 月:观看次数:19
月份:2018 年 10 月:观看次数:1
月:2019 年 1 月:观看次数:2
月:2019 年 2 月:观看次数:8
月:2019 年 7 月:观看次数:14
我想要的是插入缺少的月份,views=0
如果结果中不存在月份:
月:2018 年 8 月:观看次数:19
月:2018 年 9 月:观看次数:0 - 这不在表格中。我分配给 0
月:2018 年 10 月:观看次数:1
月:2018 年 11 月:观看次数 : 0 - 这不在表格中。我分配给 0
Month:2018 年 12 月:Views:0 - 这不在表格中。我分配给 0
我遵循了这个答案,这是我想要的解决方案,但需要多年。如果您看到此答案,您将找不到年份,因此可以通过创建值 = 0 的月份数组之前和之后用数据库值覆盖它来轻松操作它
链接:Query missing months in which we haven't sold anything?
【问题讨论】:
-
只需在循环中添加一个计数器。每当行结果与计数器不匹配时,打印 0。
-
感谢您的回复 :) 请检查上面的编辑。我应该匹配什么?如果它不存在,我必须插入一个密钥。你能提供一个解决方案吗?这对我很有帮助!