【问题标题】:Chart.js - Getting data from database using mysql and phpChart.js - 使用 mysql 和 php 从数据库中获取数据
【发布时间】:2015-06-19 02:11:36
【问题描述】:

我正在尝试将静态数据转换为使用数据库结果。我将使用 MySQLPHP

示例代码:

var randomScalingFactor = function(){ return Math.round(Math.random()*100)};
var lineChartData = {
    labels : ["January","February","March","April","May","June","July"],
    datasets : [
        {
            label: "My First dataset",
            fillColor : "rgba(220,220,220,0.2)",
            strokeColor : "rgba(220,220,220,1)",
            pointColor : "rgba(220,220,220,1)",
            pointStrokeColor : "#fff",
            pointHighlightFill : "#fff",
            pointHighlightStroke : "rgba(220,220,220,1)",
            data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
        },
        {
            label: "My Second dataset",
            fillColor : "rgba(151,187,205,0.2)",
            strokeColor : "rgba(151,187,205,1)",
            pointColor : "rgba(151,187,205,1)",
            pointStrokeColor : "#fff",
            pointHighlightFill : "#fff",
            pointHighlightStroke : "rgba(151,187,205,1)",
            data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
        }
    ]
    }
window.onload = function(){
    var ctx = document.getElementById("canvas").getContext("2d");
    window.myLine = new Chart(ctx).Line(lineChartData, {
        responsive: true
    });
}

下面是我的 php/msql:

$result = mysql_query("SELECT COUNT(*) FROM customer WHERE month='january'") or die(mysql_error());
$row1 = mysql_fetch_array( $result );

$result = mysql_query("SELECT COUNT(*) FROM customer WHERE month='february'") or die(mysql_error());
$row2 = mysql_fetch_array( $result );

$result = mysql_query("SELECT COUNT(*) FROM customer WHERE month='march'") or die(mysql_error());
$row3 = mysql_fetch_array( $result );

如何使用我的 MySQL 查询中的 count() 并将其实现到 chartjs 上的数据集?我也希望从我的 MySQL 查询中生成标签。我应该在 jQuery 代码中循环数据集吗?

这是我正在使用的插件:http://www.chartjs.org/docs/#line-chart-introduction

【问题讨论】:

    标签: php mysql chart.js


    【解决方案1】:

    首先使用 PHP 将您的数据转换为合适的数据结构

    $months = array("january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december");
    $monthvalues = array();
    foreach ($months as $month) {
        $monthvalues[$month] = 0;
    }
    
    $result = mysql_query("SELECT month, count(*) FROM customer group by month") or die(mysql_error());
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        $monthvalues[$row[0]] = (int)$row[1];
    }
    

    在下面,只需将这些数据结构插入到您的 Javascript 中

    var randomScalingFactor = function(){ return Math.round(Math.random()*100)};
    var lineChartData = {
        labels : <?=json_encode($months);?>,
        datasets : [
            {
                label: "My First dataset",
                fillColor : "rgba(220,220,220,0.2)",
                strokeColor : "rgba(220,220,220,1)",
                pointColor : "rgba(220,220,220,1)",
                pointStrokeColor : "#fff",
                pointHighlightFill : "#fff",
                pointHighlightStroke : "rgba(220,220,220,1)",
                data : <?=json_encode(array_values($monthvalues));?>
            }
        ]
    }
    

    假设 window.onload 和 canvas 元素的 HTML 位于适当的位置。

    【讨论】:

    • 您可能需要检查语法 :-) 我不懂 PHP,只是想试一试。
    • 您能帮帮我吗,我的图表系统有问题,如果您有解决方案,请帮我检查我的问题,请告诉我。这是我的问题链接:stackoverflow.com/questions/49066512/…
    • 这里的问题是如果你有很多数据集,时间太长而且不可重用
    【解决方案2】:

    请将您的 php 代码放入另一个名为 api.php 的文件中,并使用 $.ajaxJSON 格式获取这些数据。要将数据转换为 JSON 格式的数据,您应该使用json_encode() php 函数。

    我已经设置了示例示例,您可以查看here

    请参考以下代码示例:

    1. api.php

      $arrLabels = array("January","February","March","April","May","June","July");
      $arrDatasets = array('label' => "My First dataset",'fillColor' => "rgba(220,220,220,0.2)", 'strokeColor' => "rgba(220,220,220,1)", 'pointColor' => "rgba(220,220,220,1)", 'pointStrokeColor' => "#fff", 'pointHighlightFill' => "#fff", 'pointHighlightStroke' => "rgba(220,220,220,1)", 'data' => array('28', '48', '40', '19', '86', '27', '90'));
      
      $arrReturn = array(array('labels' => $arrLabels, 'datasets' => $arrDatasets));
      
      print (json_encode($arrReturn));
      
    2. example.html

      $.ajax({
      type: 'POST',
      url: 'api.php',
      success: function (data) {
      lineChartData = data;//alert(JSON.stringify(data));
      var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);
      
      var ctx = document.getElementById("canvas").getContext("2d");
      window.myLine = new Chart(ctx).Line(lineChartData, {responsive: true});
      } 
      });
      

    请注意,您应该将randomScalingFactor() 的值传递给api.php

    如果您需要任何进一步的帮助,请查看并告诉我。

    【讨论】:

    • 请建议如何添加 randomScalingFactor() ?
    • 我参加聚会可能有点晚了,但是this PHPChartJS library might help
    • 链接中的示例不起作用。没有显示图表,并显示错误消息“未捕获的 ReferenceError:未定义图表”
    【解决方案3】:

    这是基于上面的答案,并进行了一些更改。

    php:

    include 'db.php';
    $query = "SELECT month, COUNT(*) count FROM customer WHERE month='march' GROUP BY month";
    
    if ($stmt = $conn->prepare($query)) {
        $stmt->execute();
        $stmt->bind_result($month, $count);            
    
        $labels = array();
        $data = array();
    
        while ($stmt->fetch()) {
            $labels[] = $month;
            $data[] = $count;
        }
            $stmt->close();
    }
    
    $datasets = array('label'=>"timer",'data'=> $data);
    $data = array('labels'=>$labels, 'datasets'=> array($datasets));
    
    echo json_encode($data);
    

    我必须在传入的数组上使用 JSON.pare()。

    Javascript:

    $.ajax({
        type: 'POST',
        url: 'api.php ',
        datatype: 'json',
        success: function (result) {
            var ctx = document.getElementById("chart").getContext("2d");
            var mychart = new Chart(ctx,
            {
                type: 'bar',
                data: JSON.parse(result),
                options: {
                    scales: {
                        yAxes: [{
                            ticks: {
                                beginAtZero: true
                            }
                        }]
                    }
                }
            })
        }
    })
    

    html:

    <canvas id="chart" width="200" height="200"></canvas>
    

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 2020-04-02
      • 2018-07-07
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多