如何使用来自MySQL数据库的数据创建包含fusioncharts的组合图(条形图和线条)?

时间:2016-08-05 19:31:45

标签: php mysql json fusioncharts

我在网上发现这个代码基本上可以完成我正在寻找的所有内容,除非他们不像我一样使用MySQL数据库中的数据。这是他们的代码:

{
    "chart": {
        "caption": "Inventory by Product Categories",
        "bgcolor": "FFFFFF",
        "plotgradientcolor": "",
        "showalternatehgridcolor": "0",
        "showplotborder": "0",
        "divlinecolor": "CCCCCC",
        "showvalues": "0",
        "showcanvasborder": "0",
        "pyaxisname": "Cost of Inventory",
        "syaxisname": "Units in Inventory",
        "numberprefix": "$",
        "labeldisplay": "STAGGER",
        "slantlabels": "1",
        "canvasborderalpha": "0",
        "legendshadow": "0",
        "legendborderalpha": "0",
        "showborder": "0"
    },
    "categories": [
        {
            "category": [
                {
                    "label": "Seafood",
                    "labelPadding": 0
                },
                {
                    "label": "Beverages",
                    "labelPadding": 12
                },
                {
                    "label": "Condiments",
                    "labelPadding": 0
                },
                {
                    "label": "Dairy Products",
                    "labelPadding": 12
                },
                {
                    "label": "Confections",
                    "labelPadding": 0
                },
                {
                    "label": "Meat/Poultry",
                    "labelPadding": 12
                },
                {
                    "label": "Grains/Cereals",
                    "labelPadding": 0
                },
                {
                    "label": "Produce",
                    "labelPadding": 12
                }
            ]
        }
    ],
    "dataset": [
        {
            "seriesname": "Cost of Inventory",
            "color": "008ee4",
            "data": [
                {
                    "value": "13510"
                },
                {
                    "value": "12480"
                },
                {
                    "value": "12024"
                },
                {
                    "value": "11271"
                },
                {
                    "value": "10392"
                },
                {
                    "value": "5729"
                },
                {
                    "value": "5594"
                },
                {
                    "value": "3549"
                }
            ]
        },
        {
            "seriesname": "Quantity",
            "parentyaxis": "S",
            "renderas": "Line",
            "color": "f8bd19",
            "data": [
                {
                    "value": "701"
                },
                {
                    "value": "559"
                },
                {
                    "value": "507"
                },
                {
                    "value": "393"
                },
                {
                    "value": "386"
                },
                {
                    "value": "165"
                },
                {
                    "value": "258"
                },
                {
                    "value": "100"
                }
            ]
        }
    ]
}

这是有道理的,但它改变了这个JSON代码以接受来自数据库的数据而不是硬编码这对我来说很难。

以下是我的代码的相关部分:

<?php
        $strQuery2 = "SELECT ScrapDate, SUM(Quantity) AS Quantity FROM Scrap WHERE Department = 'WE' GROUP BY ScrapDate ORDER BY ScrapDate";

        // Execute the query, or else return the error message.
        $result2 = $dbhandle->query($strQuery2) or exit("Error code ({$dbhandle->errno}): {$dbhandle->error}");

        // If the query returns a valid response, prepare the JSON string
        if ($result2) {
                // The `$arrData` array holds the chart attributes and data
                $arrData2 = array(
                "chart" => array(
                    "caption" => "WE Last Week Scrap Quantity",
                    "paletteColors" => "#0075c2",
                    "bgColor" => "#ffffff",
                    "borderAlpha"=> "20",
                    "canvasBorderAlpha"=> "0",
                    "usePlotGradientColor"=> "0",
                    "plotBorderAlpha"=> "10",
                    "showXAxisLine"=> "1",
                    "xAxisLineColor" => "#999999",
                    "showValues"=> "0",
                    "divlineColor" => "#999999",
                    "divLineIsDashed" => "1",
                    "showAlternateHGridColor" => "0",
                    "xAxisName"=> "Day",
                    "yAxisName"=> "Quantity"
                )
                );

                $arrData2["data"] = array();

        // Push the data into the array

                while($row2 = mysqli_fetch_array($result2)) {
                array_push($arrData2["data"], array(
                "label" => $row2["ScrapDate"],
                "value" => $row2["Quantity"],
//                "link" => "deptDrillDown.php?Department=".$row["Department"]
                )
                );
                }

        $jsonEncodedData2 = json_encode($arrData2);

        $columnChart2 = new FusionCharts("column2D", "chart2" , 600, 300, "chart-2", "json", $jsonEncodedData2);

        // Render the chart
        $columnChart->render();
        $columnChart2->render();

        // Close the database connection
        $dbhandle->close();

        }
?>

截至目前,我可以从MySQL数据库中获取数据,并将其轻松地放入图表中。现在我想再添加1个数据集,我该怎么做?

1 个答案:

答案 0 :(得分:0)

要动态更新图表,请遵循methods非常有用:

  
      
  • getJSONData:以JSON格式获取图表数据。
  •   
  • setJSONData:以JSON数据格式设置图表数据
  •   

示例实现显示在下面的代码段中。该图表最初呈现为默认的column2d图表。单击Add Area按钮后,区域数据集将以可视方式更新。同样,单击Add Line按钮添加行数据集。 Reset按钮仅恢复原始列的可视化。

var visitChart,
  areaBtn = document.getElementById('area'),
  lineBtn = document.getElementById('line'),
  resetBtn = document.getElementById('reset');
FusionCharts.ready(function() {
  visitChart = new FusionCharts({
    type: 'mscombi2d',
    renderAt: 'chart-container',
    width: '500',
    height: '300',
    dataFormat: 'json',
    dataSource: {
      "chart": {
        "caption": "Actual Revenues, Targeted Revenues & Profits",
        "subcaption": "Last year",
        "xaxisname": "Month",
        "yaxisname": "Amount (In USD)",
        "numberprefix": "$",
        "theme": "fint"
      },
      "categories": [{
        "category": [{
          "label": "Jan"
        }, {
          "label": "Feb"
        }, {
          "label": "Mar"
        }, {
          "label": "Apr"
        }, {
          "label": "May"
        }, {
          "label": "Jun"
        }, {
          "label": "Jul"
        }, {
          "label": "Aug"
        }, {
          "label": "Sep"
        }, {
          "label": "Oct"
        }, {
          "label": "Nov"
        }, {
          "label": "Dec"
        }]
      }],
      "dataset": [{
        "seriesname": "Actual Revenue",
        "data": [{
          "value": "16000"
        }, {
          "value": "20000"
        }, {
          "value": "18000"
        }, {
          "value": "19000"
        }, {
          "value": "15000"
        }, {
          "value": "21000"
        }, {
          "value": "16000"
        }, {
          "value": "20000"
        }, {
          "value": "17000"
        }, {
          "value": "25000"
        }, {
          "value": "19000"
        }, {
          "value": "23000"
        }]
      }]
    }
  }).render();
});
areaBtn.addEventListener('click', function() {
  var dataset,
    json = visitChart.getJSONData();
  if (!(dataset = json.dataset)) {
    dataset = json.dataset = [];
  }
  dataset.push({
    "seriesname": "Profit",
    "renderas": "area",
    "showvalues": "0",
    "data": [{
      "value": "4000"
    }, {
      "value": "5000"
    }, {
      "value": "3000"
    }, {
      "value": "4000"
    }, {
      "value": "1000"
    }, {
      "value": "7000"
    }, {
      "value": "1000"
    }, {
      "value": "4000"
    }, {
      "value": "1000"
    }, {
      "value": "8000"
    }, {
      "value": "2000"
    }, {
      "value": "7000"
    }]
  });
  visitChart.setJSONData(json);
  areaBtn.disabled = true;
});
lineBtn.addEventListener('click', function() {
  var dataset,
    json = visitChart.getJSONData();
  if (!(dataset = json.dataset)) {
    dataset = json.dataset = [];
  }
  dataset.push({
    "seriesname": "Projected Revenue",
    "renderas": "line",
    "showvalues": "0",
    "data": [{
      "value": "15000"
    }, {
      "value": "16000"
    }, {
      "value": "17000"
    }, {
      "value": "18000"
    }, {
      "value": "19000"
    }, {
      "value": "19000"
    }, {
      "value": "19000"
    }, {
      "value": "19000"
    }, {
      "value": "20000"
    }, {
      "value": "21000"
    }, {
      "value": "22000"
    }, {
      "value": "23000"
    }]
  });
  visitChart.setJSONData(json);
  lineBtn.disabled = true;
});
resetBtn.addEventListener('click', function() {
  var dataset,
    len,
    json = visitChart.getJSONData();
  if (!(dataset = json.dataset)) {
    dataset = json.dataset = [];
  }
  if ((len = dataset.length) > 1) {
    dataset.splice(1, len - 1);
  }
  visitChart.setJSONData(json);
  areaBtn.disabled = false;
  lineBtn.disabled = false;
});
<script src="http://static.fusioncharts.com/code/latest/fusioncharts.js"></script>
<script src="http://static.fusioncharts.com/code/latest/themes/fusioncharts.theme.fint.js"></script>
<button id='area'>Add Area</button>
<button id='line'>Add Line</button>
<button id='reset'>Reset</button>
<span id="chart-container">FusionCharts XT will load here!</span>

可以以与上述类似的方式从数据库中获取附加的数据。