【问题标题】:Populating amchart dynamically fetching data from mysql填充amchart从mysql动态获取数据
【发布时间】:2025-12-09 01:40:01
【问题描述】:

我正在尝试从mysql 获取记录并通过amchart 呈现数据,但我在这样做时遇到了困难。我编写了以下代码,但它不起作用。查询工作正常,但问题是用查询结果替换静态(占位符)数据。请提出建议。

{

$selectdata="SELECT member_lhp, COUNT( * ) AS  'land_pattern' FROM hh_basic_info GROUP BY member_lhp";
$resdata=mysql_query($selectdata);

<script type="text/javascript">
    var chart;
    var chartData = [
        <?php
            $count=0;
            while($rowdata = mysql_fetch_assoc($resdata))
            foreach($rowdata as $rows){
                $type= $rows['member_lhp'];
                $lp=$rows['land_pattern'];
                if($count++ > 0) echo ',';
        ?>
        {
            year: <?php echo $type;?>,
            income: <?php echo $lp;?>
        },
        <?php } ?>
    ];

    AmCharts.ready(function () {
        // SERIAL CHART
        chart = new AmCharts.AmSerialChart();
        chart.dataProvider = chartData;
        chart.categoryField = "year";
        // this single line makes the chart a bar chart, 
        // try to set it to false - your bars will turn to columns                
        chart.rotate = true;
        // the following two lines makes chart 3D
        chart.depth3D = 20;
        chart.angle = 30;

        // AXES
        // Category
        var categoryAxis = chart.categoryAxis;
        categoryAxis.gridPosition = "start";
        categoryAxis.axisColor = "#DADADA";
        categoryAxis.fillAlpha = 1;
        categoryAxis.gridAlpha = 0;
        categoryAxis.fillColor = "#FAFAFA";

        // value
        var valueAxis = new AmCharts.ValueAxis();
        valueAxis.axisColor = "#DADADA";
        valueAxis.title = "Villagers - Land holding pattern";
        valueAxis.gridAlpha = 0.1;
        chart.addValueAxis(valueAxis);

        // GRAPH
        var graph = new AmCharts.AmGraph();
        graph.title = "Income";
        graph.valueField = "income";
        graph.type = "column";
        graph.balloonText = "Land holding number in [[category]]:[[value]]";
        graph.lineAlpha = 0;
        graph.fillColors = "#bf1c25";
        graph.fillAlphas = 1;
        chart.addGraph(graph);

        // WRITE
        chart.write("chartdiv");
    });
</script>
}

【问题讨论】:

  • 真正的问题是什么? “动态数据与静态数据的排列”一点都不清楚。会发生什么,您希望发生什么?
  • 我想用从数据库中获取的动态数据替换静态数据。静态数据:{ var chartData = [{ year: 'Landless', income: 16 }, { year: 'Marginal (upto 2.5 acre)', income: 7 }, { year: 'Small (2.5 5 acre)',收入:6 },{ 年:'中型(5 - 12.5 英亩)',收入:0 },{ 年:'大(12.5 英亩 - 更多)',收入:0 }]; }
  • 看起来您已经在动态执行此操作,需要将年份的值放在引号内 year: '&lt;?php echo $type;?&gt;',

标签: mysql dynamic amcharts


【解决方案1】:

乍一看,您可能在大括号后添加了一个额外的逗号。如果您的计数大于 0,您已经通过 PHP 添加了一个逗号,因此这将在每组数据之间引入第二个不必要的逗号。

你有以下...

    {
      year: <?php echo $type;?>,
      income: <?php echo $lp;?>
    },

试着用这个代替...

    {
      year: <?php echo $type;?>,
      income: <?php echo $lp;?>
    }

【讨论】:

    【解决方案2】:

    好像忘记解析json格式了, 随便写

    var newchartData= JSON.parse(chartData);
    

    现在将newcharData 分配给DataProvider,它应该可以工作了。

    【讨论】: