如何从 MySQL 数据库的多个表中获取数据并使用 PHP 对其进行操作以显示图形?

How to get data from multiple tables of MySQL DB and manuplate it using PHP to display graphs?

我想为销售、采购和转移的年度报告制作图表。 MySQL 查询和 PHP 代码和图形代码如下。

MySQL 要求

SALES QUERY

SELECT COUNT(id) AS sales, DATE_FORMAT( date, '%Y-%M' ) AS dataofmonth FROM sales 

WHERE `date` LIKE '2015%'

GROUP BY DATE_FORMAT(date, '%Y-%M')
ORDER BY DATE_FORMAT(date, '%Y-%M') ASC

PURCHASES QUERY

SELECT COUNT(id) AS num, DATE_FORMAT( date, '%Y-%M' ) AS dataofmonth FROM purchases 

WHERE `date` LIKE '2015%'

GROUP BY DATE_FORMAT(date, '%Y-%M')
ORDER BY DATE_FORMAT(date, '%Y-%M') ASC

TRANSFERS QUERY

SELECT COUNT(id) AS num, DATE_FORMAT( date, '%Y-%M' ) AS dataofmonth FROM transfers 

WHERE `date` LIKE '2015%'

GROUP BY DATE_FORMAT(date, '%Y-%M')
ORDER BY DATE_FORMAT(date, '%Y-%M') ASC

现在,销售查询返回以下数据

sales, dataofmonth
1   2015-December
3   2015-January

数据库中只有一月和十二月的数据。所以,我想在其他月份显示0。

图表/图表

我正在使用 high-charts 来显示图表页面,使用以下代码,效果很好,但我无法使用 PHP.

使其动态化
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>

<script type="text/javascript">
        jQuery.noConflict();

        var example = 'line-basic', 
        theme = 'default';

        (function($){ // encapsulate jQuery


            $(function () {
    $('#container').highcharts({
        title: {
            text: 'Monthly Average Report',
            x: -20 //center
        },/*
        subtitle: {
            text: 'Source: WorldClimate.com',
            x: -20
        },*/
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        yAxis: {
            title: {
                text: '<?=$_SESSION['mcs_name']?>'
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },/*
        tooltip: {
            valueSuffix: '°C'
        },*/
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle',
            borderWidth: 0
        },
        series: [{
            name: 'Purchases',
            data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
        }, {
            name: 'Sales',
            data: [<?=@$janS?>, <?=@$febS?>, <?=@$marS?>, <?=@$aprS?>, <?=@$mayS?>, <?=@$junS?>, <?=@$julS?>, <?=@$augS?>, <?=@$sepS?>, <?=@$octS?>, <?=@$novS?>, <?=@$decS?>]
        }, {
            name: 'Transfers',
            data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
        }]
    });
});

        })(jQuery);
</script>

<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>

PHP 代码

我的 PHP 代码有很多问题,因为我是创建图表的初学者。

<?php
    $purchases = $db->query("SELECT COUNT(id) AS num, DATE_FORMAT( date, '%Y-%M' ) AS dataofmonth FROM purchases WHERE `date` LIKE '2015%' GROUP BY DATE_FORMAT(date, '%Y-%M') ORDER BY DATE_FORMAT(date, '%Y-%M') ASC");
    $sales = $db->query("SELECT COUNT(id) AS num, DATE_FORMAT( date, '%Y-%M' ) AS dataofmonth FROM sales WHERE `date` LIKE '2015%' GROUP BY DATE_FORMAT(date, '%Y-%M') ORDER BY DATE_FORMAT(date, '%Y-%M') ASC");
    $transfers = $db->query("SELECT COUNT(id) AS num, DATE_FORMAT( date, '%Y-%M' ) AS dataofmonth FROM transfers WHERE `date` LIKE '2015%' GROUP BY DATE_FORMAT(date, '%Y-%M') ORDER BY DATE_FORMAT(date, '%Y-%M') ASC");

    while($objP = $purchases->fetch(PDO::FETCH_OBJ))
    {
        if($objP->dataofmonth == "".date('Y')."-January")
            $janP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-February")
            $febP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-March")
            $marP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-April")
            $aprP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-May")
            $mayP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-June")
            $junP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-July")
            $julP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-August")
            $augP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-September")
            $sepP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-October")
            $octP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-November")
            $novP = $objP->num;
        if($objP->dataofmonth == "".date('Y')."-December")
            $decP = $objP->num;
    }
    while($objS = $sales->fetch(PDO::FETCH_OBJ))
    {
        if($objS->dataofmonth == "".date('Y')."-January")
            $janS = $objS->num;
        else
            $janS = 0;

        if($objS->dataofmonth == "".date('Y')."-February")
            $febS = $objS->num;
        else
            $febS = 0;

        if($objS->dataofmonth == "".date('Y')."-March")
            $marS = $objS->num;
        else
            $marS = 0;

        if($objS->dataofmonth == "".date('Y')."-April")
            $aprS = $objS->num;
        else
            $aprS = 0;

        if($objS->dataofmonth == "".date('Y')."-May")
            $mayS = $objS->num;
        else
            $mayS = 0;

        if($objS->dataofmonth == "".date('Y')."-June")
            $junS = $objS->num;
        else
            $junS = 0;

        if($objS->dataofmonth == "".date('Y')."-July")
            $julS = $objS->num;
        else
            $julS = 0;

        if($objS->dataofmonth == "".date('Y')."-August")
            $augS = $objS->num;
        else
            $augS = 0;

        if($objS->dataofmonth == "".date('Y')."-September")
            $sepS = $objS->num;
        else
            $sepS = 0;

        if($objS->dataofmonth == "".date('Y')."-October")
            $octS = $objS->num;
        else
            $octS = 0;

        if($objS->dataofmonth == "".date('Y')."-November")
            $novS = $objS->num;
        else
            $novS = 0;

        if($objS->dataofmonth == "".date('Y')."-December")
            $decS = $objS->num;
        else
            $decS = 0;

    }
    while($objT = $transfers->fetch(PDO::FETCH_OBJ))
    {
        if($objT->dataofmonth == "".date('Y')."-January")
            $janT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-February")
            $febT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-March")
            $marT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-April")
            $aprT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-May")
            $mayT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-June")
            $junT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-July")
            $julT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-August")
            $augT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-September")
            $sepT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-October")
            $octT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-November")
            $novT = $objT->num;
        if($objT->dataofmonth == "".date('Y')."-December")
            $decT = $objT->num;
    }
?>

在上面的 php 代码中,我试图将数据放入高图表代码的后续行但失败了。

{
    name: 'Sales',
    data: [<?=@$janS?>, <?=@$febS?>, <?=@$marS?>, <?=@$aprS?>, <?=@$mayS?>, <?=@$junS?>, <?=@$julS?>, <?=@$augS?>, <?=@$sepS?>, <?=@$octS?>, <?=@$novS?>, <?=@$decS?>]
}

如果我的目标和工作流程正确,您应该更换:

 while($objS = $sales->fetch(PDO::FETCH_OBJ))
    {
        if($objS->dataofmonth == "".date('Y')."-January")
            $janS = $objS->num;
        else
            $janS = 0;

        if($objS->dataofmonth == "".date('Y')."-February")
            $febS = $objS->num;
        else
            $febS = 0;

        if($objS->dataofmonth == "".date('Y')."-March")
            $marS = $objS->num;
        else
            $marS = 0;

        if($objS->dataofmonth == "".date('Y')."-April")
            $aprS = $objS->num;
        else
            $aprS = 0;

        if($objS->dataofmonth == "".date('Y')."-May")
            $mayS = $objS->num;
        else
            $mayS = 0;

        if($objS->dataofmonth == "".date('Y')."-June")
            $junS = $objS->num;
        else
            $junS = 0;

        if($objS->dataofmonth == "".date('Y')."-July")
            $julS = $objS->num;
        else
            $julS = 0;

        if($objS->dataofmonth == "".date('Y')."-August")
            $augS = $objS->num;
        else
            $augS = 0;

        if($objS->dataofmonth == "".date('Y')."-September")
            $sepS = $objS->num;
        else
            $sepS = 0;

        if($objS->dataofmonth == "".date('Y')."-October")
            $octS = $objS->num;
        else
            $octS = 0;

        if($objS->dataofmonth == "".date('Y')."-November")
            $novS = $objS->num;
        else
            $novS = 0;

        if($objS->dataofmonth == "".date('Y')."-December")
            $decS = $objS->num;
        else
            $decS = 0;

    }

至:

$salesArr = array_fill(1,12,0);
 while($objS = $sales->fetch(PDO::FETCH_OBJ))
    {
        if($objS->dataofmonth == "".date('Y')."-January")
            $salesArr[1] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-February")
            $salesArr[2] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-March")
            $salesArr[3] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-April")
            $salesArr[4] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-May")
            $salesArr[5] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-June")
            $salesArr[6] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-July")
            $salesArr[7] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-August")
            $salesArr[8] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-September")
            $salesArr[9] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-October")
            $salesArr[10] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-November")
            $salesArr[11] = $objS->num;
        if($objS->dataofmonth == "".date('Y')."-December")
            $salesArr[12] = $objS->num;

    }

并更改您的:

{
    name: 'Sales',
    data: [<?=@$janS?>, <?=@$febS?>, <?=@$marS?>, <?=@$aprS?>, <?=@$mayS?>, <?=@$junS?>, <?=@$julS?>, <?=@$augS?>, <?=@$sepS?>, <?=@$octS?>, <?=@$novS?>, <?=@$decS?>]
}

至:

{
    name: 'Sales',
    data: [<?=implode(',',$salesArr) ?>]
}

希望我的猜测是正确的并且对您有所帮助:-)