有没有一种方法可以计算来自mysql和 将其显示为条形图,我正在尝试制作出勤报告 使用莫里斯条形图。
这是我的示例代码:
<html >
<head>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
</head>
<body>
<div id="chart"></div>
</body>
</html>
这是我的php代码:
<?php
$connect = mysqli_connect("localhost", "root", "", "sa");
$query = "SELECT year, count(*) as course FROM test group by year,course order by year ASC ";
$result = mysqli_query($connect, $query);
$chart_data = '';
while($row = mysqli_fetch_array($result))
{
$chart_data .= "{ year:'".$row["year"]."', course:".$row["course"]."}, ";
}
$chart_data = substr($chart_data, 0, -2);
?>
这是我的javascript:
<script>
Morris.Bar({
element : 'chart',
data:[<?php echo $chart_data; ?>],
xkey:'year',
ykeys:['course','course','course','course','course'],
labels:['BSIT','BSHRM','BSCS','BSTM','ABCOMM'],
hideHover:'auto',
xLabelAngle: '60',
verticalGrid: true,
resize:true,
barColors: ['red','blue','green','yellow','black'],
gridTextSize: 12
});
</script>
这是我的数据库:
如您在我的输出中看到的,例如,所有课程都具有相同的价值 这两个2018-07-12的输出应该基于我的数据库,BSIT = 3 其余为零值,与其他2018-07-12相同,输出应为BSHRM = 1,其余为零值,有没有办法实现这一目标?,希望您能对我有所帮助。
答案 0 :(得分:0)
查询有两个问题:
首先,别名COUNT(*) AS course
重用列名作为别名。您需要给它起一个不同的名字。
第二,您将course
排除在分组之外,因此您将所有课程的计数合并到结果中。
应该是:
$query = "SELECT year , course , count(*) as count FROM test group by year, course order by year ASC ";
然后,每门课程将位于结果的不同行中,处理结果时需要重新分组。
您也不应该通过串联字符串来创建JSON。将结果放入数组中并使用json_encode()
。
$results = array();
while ($row = mysqli_fetch_assoc($result)) {
$results[$row['year']]['year'] = $row['year'];
$results[$row['year']][$row['course']] = $row['count'];
}
$chart_data = json_encode(array_values($results));
此方法将课程名称用作JSON中的键,而不是course1
,course2
等。因此,您需要更改
ykeys:['course','course','course','course','course'],
收件人:
ykeys:['BSIT','BSHRM','BSCS','BSTM','ABCOMM'],
$chart_data
中的JSON已经在数组周围包括方括号,因此您无需在回显周围添加它。使用:
data: <?php echo $chart_data; ?>,