我有一个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();
}
编辑:上面的函数返回此值
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
月:2018年12月:观看次数:0-不在表格中。我分配给0
我遵循了这个答案,这是我想要的解决方案,但是需要很多年。如果您看到此答案,将找不到年份,因此可以轻松创建年份,方法是先创建值= 0的months数组,然后再用数据库值覆盖它
链接:Query missing months in which we haven't sold anything?
答案 0 :(得分:1)
您可以使用for循环
$data=$this->users->chartData();
$keys=array();
$values=array();
for ($cnt = 0; $cnt<12; $cnt++){
if (isset($data[$cnt])){
$keys[$cnt] = $cnt;
$values[$cnt] = $data[$cnt]['value'];
} else {
$keys[$cnt] = $cnt;
$values[$cnt] = 0;
}
}
答案 1 :(得分:1)
也许是这样吗?
我从键的开头到键的结尾循环为strtotime。
我使用array_search来查看是否在值中找到它(如果不添加零值,否则添加值)。
$keys = ["2018-August","2018-October","2018-September","2019-January","2019-October"];
$values = [21,3,3,1,1];
For($i= strtotime($keys[0]); $i<=strtotime(end($keys)); $i+=86400*31){
$search = array_search(date("Y-F", $i), $keys);
if($search !== false){
$new[$keys[$search]] = $values[$search];
}else{
$new[date("Y-F", $i)] =0;
}
}
$new[end($keys)] = end($values); //add last item since I loop between the dates
Var_dump($new);
输出:
array(15) {
["2018-August"]=>
int(21)
["2018-September"]=>
int(3)
["2018-October"]=>
int(3)
["2018-November"]=>
int(0)
["2018-December"]=>
int(0)
["2019-January"]=>
int(1)
["2019-February"]=>
int(0)
["2019-March"]=>
int(0)
["2019-April"]=>
int(0)
["2019-May"]=>
int(0)
["2019-June"]=>
int(0)
["2019-July"]=>
int(0)
["2019-August"]=>
int(0)
["2019-September"]=>
int(0)
["2019-October"]=>
int(1)
}