javascript - 统计mysql中的重复数据

标签 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 正如您在我的输出中看到的,例如,所有类(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 中的键,而不是 course1course2 等。因此您需要更改

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/

相关文章:

javascript - 展开和折叠 div

php - 将信息从 PHP 数组中获取到循环中的单个值

php - 将数据移动到新的 MySQL

php - 将 json 文件中的 blob 数据发送到 android 应用程序

javascript - 当我在主窗口上按下暂停时,倒计时器在其他窗口上更新

javascript - 在 Javascript 中调用后延迟函数

javascript - 渲染一个 Jbuilder 模板并将字符串分配给 gon

javascript - 使用管道符号分隔数据中的 jquery 填充 html 选择框

javascript - 通过索引分配对表进行排序

html - 我们如何覆盖用户代理样式表?