我正在尝试为Highcharts图表构建数据,但是当某天没有行时遇到了麻烦。

即我希望图表显示本周每天的查询。如果周三未收到任何查询,则图表中缺少该天,或者周四的数据落入周三,这是错误的,具体取决于我的工作。

SQL我有:

$W = date('W');
    $Y = date('Y');
    $SQL = "SELECT DATE_FORMAT(enquiries.dateCreated, '%a') AS name, COUNT(*) AS y
            FROM enquiries
            WHERE WEEK(enquiries.dateCreated, 1) = $W
            AND YEAR(enquiries.dateCreated) = $Y
            GROUP BY DAY(enquiries.dateCreated)";
    $result = $this->db->prepare($SQL);
    $result->execute();
    return $result->fetchAll(PDO::FETCH_ASSOC);


我目前尝试将其放入无法正常工作的数组中:

$enquiries = $this->model->enquiriesTime();

    $dayData = array();
    for ($i = 0; $i != 5; $i++) {
        if ($enquiries[$i]['name'] == 'Mon' || $enquiries[$i]['name'] == 'Tue' || $enquiries[$i]['name'] == 'Wed' || $enquiries[$i]['name'] == 'Thu' || $enquiries[$i]['name'] == 'Fri') {
            $dayData[$i] = $enquiries[$i]['y'];
        } else {
            $dayData[$i] = '0';
        }
    }


如果不存在一天,则0会添加到数组的末尾,而不是像应有的那样添加索引2(星期三),因此,周三的结果实际上是周四。

我如何才能使其正常工作?



这是JS:

function createActivityChart() {

$.ajax({
    url: ROOT + 'Ajax',
    data: {
        call: 'lists->enquiriesTime'
    },
    dataType: 'json',
    type: 'POST',
    async: true,
    success: function(returned) {
        $('#enquiriesChart').highcharts({
            chart: {
                type: 'column'
            },
            title: {
                text: 'Weekly activity chart'
            },
            xAxis: {
                categories: [
                    'Mon',
                    'Tue',
                    'Wed',
                    'Thu',
                    'Fri'
                ]
            },
            yAxis: {
                min: 0,
                title: null,
                stackLabels: {
                    enabled: true,
                    style: {
                        fontWeight: 'bold',
                        color: (Highcharts.theme && Highcharts.theme.textColor) || 'gray'
                    }
                }
            },
            tooltip: {
                headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
                pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                        '<td style="padding:0"><b>{point.y:.0f}</b></td></tr>',
                footerFormat: '</table>',
                shared: true,
                useHTML: true
            },
            plotOptions: {
                column: {
                    stacking: 'normal',
                    dataLabels: {
                        enabled: false,
                        color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white',
                        style: {
                            textShadow: '0 0 3px black, 0 0 3px black'
                        }
                    }
                }
            },
            series: returned
        });
    }
})
}


和HTML容器:

<div class="row-fluid">
                <div class="span12">
                    <div class="gridData">
                        <div id="activityChart" style="min-width: 200px; height: 200px; margin: 0 auto"></div>
                    </div>
                </div>
            </div>

最佳答案

为了避免出现问题,我要做的是用所有0值创建highchart数组,然后覆盖它们。这样,您可以确保没有数据遗留下来。

10-07 12:37
查看更多