有没有办法统计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>
这是我的数据库:
正如您在我的输出中看到的,例如,所有类(class)都具有相同的值(value) 这两个 2018-07-12 的输出应该基于我的数据库,BSIT = 3 其余的都是零值,与其他2018-07-12相同,输出应该是BSHRM =1,其余的都是零值,有没有办法实现这一点?希望你能帮助我。
最佳答案
您的查询有两个问题:
首先,别名 COUNT(*) AS course
重用列名作为别名。您需要给它一个不同的名称。
其次,您将类(class)
排除在分组之外,因此您将合并结果中所有类(class)的计数。
应该是:
$query = "SELECT year , course , count(*) as count FROM test group by year, course order by year ASC ";
每门类(class)将位于结果的不同行中,您在处理结果时需要重新分组。
您也不应该通过连接字符串来创建 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));
此方法使用类(class)名称作为 JSON 中的键,而不是 course1
、course2
等。因此您需要更改
ykeys:['course','course','course','course','course'],
至:
ykeys:['BSIT','BSHRM','BSCS','BSTM','ABCOMM'],
$chart_data
中的 JSON 已包含数组周围的方括号,因此您无需在 echo 周围添加它。使用:
data: <?php echo $chart_data; ?>,
关于javascript - 统计mysql中的重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51310410/