如何循环 php mysqli_query 以将数据输入 google 组合图表
How to loop php mysqli_query as to input data into google combochart
我目前正在做一个大学管理系统,想显示一个关于每个课程每月注册学生总数的组合图表。
就我而言,有:
- 3 门课程:DICS、DIHM 和 DIBA
- 6 个月:072019 至 122019
我目前所做的是为 DICS 创建 6 个查询,每个查询 6 个月,并分别为 DIHM 和 DIBA 创建另外 6 个查询,我知道这是一种愚蠢且不足的方法。
我的图表如下所示:
My combo chart
组合图的源代码如下:Google chart
这是我前 3 个月的 sql 查询示例:
$DICS_users_072019 = "SELECT * FROM users WHERE course = 'DICS' AND enroll_month = 072019";
$select_DICS_072019 = mysqli_query($connection,$DICS_users_072019);
$total_DICS_072019 = mysqli_num_rows($select_DICS_072019);
echo $total_DICS_072019;
$DICS_users_082019 = "SELECT * FROM users WHERE course = 'DICS' AND enroll_month = 092019";
$select_DICS_082019 = mysqli_query($connection,$DICS_users_082019);
$total_DICS_082019 = mysqli_num_rows($select_DICS_082019);
echo $total_DICS_082019;
$DICS_users_092019 = "SELECT * FROM users WHERE course = 'DICS' AND enroll_month = 092019";
$select_DICS_092019 = mysqli_query($connection,$DICS_users_092019);
$total_DICS_092019 = mysqli_num_rows($select_DICS_092019);
echo $total_DICS_092019;
这就是我将动态数据作为输入插入组合图表的方式:
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawVisualization);
function drawVisualization() {
// Some raw data (not necessarily accurate)
var data = google.visualization.arrayToDataTable([
['Month', 'DIHM', 'DICS', 'DIBA'],
<?php
$enrol_month = ['07/2019','08/2019','09/2019'];
$DICS_nums = [$total_DICS_072019 , $total_DICS_082019 , $total_DICS_092019];
$DIHM_nums = [$total_DIHM_072019 , $total_DIHM_082019 , $total_DIHM_092019];
$DIBA_nums = [$total_DIBA_072019 , $total_DIBA_082019 , $total_DIBA_092019];
for($i = 0;i< 3;i++){
echo "['{$enrol_month[$i]}'" . "," . "'{$DICS_nums[$i]}'" . "'{$DIHM_nums[$i]}'" . "'{$DIBA_nums[$i]}']";
}
?>
]);
var options = {
title : 'Total Admission of Students per Courses',
vAxis: {title: 'Numbers'},
hAxis: {title: 'Month'},
seriesType: 'bars',
series: {5: {type: 'line'}} };
var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
那么有什么方法可以让它变得更简单吗?我正在考虑将它放入 foreach 循环并执行 "WHERE course = '{x}' AND enrol_month = '{y}';" 之类的操作并将结果存储到关联数组中。这是完成此操作的有效方法吗?
查询可以按月分组,每列使用case
语句。
SELECT
enroll_month,
sum(case when course = 'DIHM' then 1 else 0 end) as DIHM,
sum(case when course = 'DICS' then 1 else 0 end) as DICS,
sum(case when course = 'DIBA' then 1 else 0 end) as DIBA
FROM
users
GROUP BY
enroll_month
// build query
$query = "SELECT enroll_month, ";
$query .= "sum(case when course = 'DIHM' then 1 else 0 end) as DIHM, ";
$query .= "sum(case when course = 'DICS' then 1 else 0 end) as DICS, ";
$query .= "sum(case when course = 'DIBA' then 1 else 0 end) as DIBA ";
$query .= "FROM users ";
$query .= "GROUP BY enroll_month ";
然后将数据加载到数组中...
// build data table
$table = [];
$table[] = ['Month', 'DIHM', 'DICS', 'DIBA'];
// get data
$result = mysqli_query($connection,$query);
while($row = mysqli_fetch_array($result)) {
// add row to data table
$table[] = [$row["enroll_month"], $row["DIHM"], $row["DICS"], $row["DIBA"]];
}
并创建数据table...
var data = google.visualization.arrayToDataTable(<?php echo json_encode($table); ?>);
我目前正在做一个大学管理系统,想显示一个关于每个课程每月注册学生总数的组合图表。
就我而言,有:
- 3 门课程:DICS、DIHM 和 DIBA
- 6 个月:072019 至 122019
我目前所做的是为 DICS 创建 6 个查询,每个查询 6 个月,并分别为 DIHM 和 DIBA 创建另外 6 个查询,我知道这是一种愚蠢且不足的方法。
我的图表如下所示: My combo chart
组合图的源代码如下:Google chart
这是我前 3 个月的 sql 查询示例:
$DICS_users_072019 = "SELECT * FROM users WHERE course = 'DICS' AND enroll_month = 072019";
$select_DICS_072019 = mysqli_query($connection,$DICS_users_072019);
$total_DICS_072019 = mysqli_num_rows($select_DICS_072019);
echo $total_DICS_072019;
$DICS_users_082019 = "SELECT * FROM users WHERE course = 'DICS' AND enroll_month = 092019";
$select_DICS_082019 = mysqli_query($connection,$DICS_users_082019);
$total_DICS_082019 = mysqli_num_rows($select_DICS_082019);
echo $total_DICS_082019;
$DICS_users_092019 = "SELECT * FROM users WHERE course = 'DICS' AND enroll_month = 092019";
$select_DICS_092019 = mysqli_query($connection,$DICS_users_092019);
$total_DICS_092019 = mysqli_num_rows($select_DICS_092019);
echo $total_DICS_092019;
这就是我将动态数据作为输入插入组合图表的方式:
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawVisualization);
function drawVisualization() {
// Some raw data (not necessarily accurate)
var data = google.visualization.arrayToDataTable([
['Month', 'DIHM', 'DICS', 'DIBA'],
<?php
$enrol_month = ['07/2019','08/2019','09/2019'];
$DICS_nums = [$total_DICS_072019 , $total_DICS_082019 , $total_DICS_092019];
$DIHM_nums = [$total_DIHM_072019 , $total_DIHM_082019 , $total_DIHM_092019];
$DIBA_nums = [$total_DIBA_072019 , $total_DIBA_082019 , $total_DIBA_092019];
for($i = 0;i< 3;i++){
echo "['{$enrol_month[$i]}'" . "," . "'{$DICS_nums[$i]}'" . "'{$DIHM_nums[$i]}'" . "'{$DIBA_nums[$i]}']";
}
?>
]);
var options = {
title : 'Total Admission of Students per Courses',
vAxis: {title: 'Numbers'},
hAxis: {title: 'Month'},
seriesType: 'bars',
series: {5: {type: 'line'}} };
var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
那么有什么方法可以让它变得更简单吗?我正在考虑将它放入 foreach 循环并执行 "WHERE course = '{x}' AND enrol_month = '{y}';" 之类的操作并将结果存储到关联数组中。这是完成此操作的有效方法吗?
查询可以按月分组,每列使用case
语句。
SELECT
enroll_month,
sum(case when course = 'DIHM' then 1 else 0 end) as DIHM,
sum(case when course = 'DICS' then 1 else 0 end) as DICS,
sum(case when course = 'DIBA' then 1 else 0 end) as DIBA
FROM
users
GROUP BY
enroll_month
// build query
$query = "SELECT enroll_month, ";
$query .= "sum(case when course = 'DIHM' then 1 else 0 end) as DIHM, ";
$query .= "sum(case when course = 'DICS' then 1 else 0 end) as DICS, ";
$query .= "sum(case when course = 'DIBA' then 1 else 0 end) as DIBA ";
$query .= "FROM users ";
$query .= "GROUP BY enroll_month ";
然后将数据加载到数组中...
// build data table
$table = [];
$table[] = ['Month', 'DIHM', 'DICS', 'DIBA'];
// get data
$result = mysqli_query($connection,$query);
while($row = mysqli_fetch_array($result)) {
// add row to data table
$table[] = [$row["enroll_month"], $row["DIHM"], $row["DICS"], $row["DIBA"]];
}
并创建数据table...
var data = google.visualization.arrayToDataTable(<?php echo json_encode($table); ?>);