计算mysql中的重复数据

时间:2018-07-12 16:19:53

标签: javascript php html mysql

有没有一种方法可以计算来自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>

这是我的数据库:

enter image description here

已更新:这是我到目前为止的输出: enter image description here

enter image description here 如您在我的输出中看到的,例如,所有课程都具有相同的价值 这两个2018-07-12的输出应该基于我的数据库,BSIT = 3  其余为零值,与其他2018-07-12相同,输出应为BSHRM = 1,其余为零值,有没有办法实现这一目标?,希望您能对我有所帮助。

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中的键,而不是course1course2等。因此,您需要更改

ykeys:['course','course','course','course','course'],

收件人:

ykeys:['BSIT','BSHRM','BSCS','BSTM','ABCOMM'],

$chart_data中的JSON已经在数组周围包括方括号,因此您无需在回显周围添加它。使用:

data: <?php echo $chart_data; ?>,