我有一个表叫end_users。我显示每本年度月注册用户数。我从一月的数据库和数据显示的数据提取到当年12月以条形图形式。例如,当前年份是2019年,因此,条形图会显示有多少用户注册的2019每月。
我想要做的是显示了基于一年的输入给用户过去一年的数据,而不是只显示当前年份。这个想法是从下拉列表,这一年传递到SQL查询的用户会选择一年。
我的模型
public function registered_user_graph(){
//This query fetch number of registered users from jan to dec of current year
$query = $this->db->query('SELECT (DATE_FORMAT(created_at,"%M")) AS "Month", COUNT(*) AS Number_of_registered_users FROM end_users WHERE year(created_at)= year(CURRENT_DATE) GROUP BY (DATE_FORMAT(created_at,"%M")) ORDER BY "Month" ASC');
if($query->num_rows() > 0){
return $query->result_array();
}else
return false;
}
我的观点
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<?php
$userPoints = array();
foreach ($userschart as $key => $value) {
$userPoints[$key]['label'] = $value['Month'];
$userPoints[$key]['y'] = $value['Number_of_registered_users'];
}
?>
<script type="text/javascript">
//for chart and graph
window.onload = function () {
//Chart of monthly registered user data
var charts = new CanvasJS.Chart("user_container", {
animationEnabled: true,
exportEnabled: true,
theme: "light1", // "light1", "light2", "dark1", "dark2"
title:{
text: "Monthly registered Users"
},
data: [{
type: "column", //change type to bar, line, area, pie, etc
//indexLabel: "{y}", //Shows y value on all Data Points
indexLabelFontColor: "#5A5757",
indexLabelPlacement: "outside",
dataPoints: <?php echo json_encode($userPoints, JSON_NUMERIC_CHECK); ?>
}]
});
chart.render();
charts.render();
}
</script>
我不认为控制器的需要,但为了以防万一,这里是我的控制器
//Looping monthly registered users data got from model
$userschart = $this->dashboard_model->registered_user_graph();
$monthlyusers = array();
foreach($userschart as $row){
$monthlyusers[] = $row;
}
$this->data['userschart'] = $monthlyusers;
$this->template->admin_render('admin/dashboard/index',$this->data);
试试这个,过去一年增加$用户输入
function registered_user_graph($userInput = "") {
if(empty($userInput)) {
$userInput = date("Y");
}
//This query fetch number of registered users from jan to dec of current year
$query = $this->db->query('SELECT (DATE_FORMAT(created_at,"%M")) AS "Month", COUNT(*) AS Number_of_registered_users FROM end_users WHERE year(created_at)= ' . $userInput . ' GROUP BY (DATE_FORMAT(created_at,"%M")) ORDER BY "Month" ASC');
if($query->num_rows() > 0){
return $query->result_array();
}else
return false;
}