在Morris图表中正确显示JSON结果

时间:2016-11-15 23:40:06

标签: javascript php mysql json

使用以下代码在Morris图表中显示MySQL数据。除非我在同一天有两个或更多记录,否则一切都很好,只在莫里斯图表中显示为一个。

PHP文件

$mysqli = mysqli_connect($hostname_membership, $username_membership, $password_membership, $database_membership);

if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}
$query = "SELECT id FROM details WHERE MemberStatus = 'Active' AND PaymentStatus NOT REGEXP 'Not'";
$result = mysqli_query($mysqli,$query);
$total_rows =  $result->num_rows;

$array = array();

foreach($mysqli->query('SELECT DateAdded, COUNT(*) FROM details GROUP BY DateAdded') as $row) {  
    $year = date("Y-m-d",strtotime($row['DateAdded']));
    array_push($array,array('Year'=>$year, 'Numb'=>$row['COUNT(*)'],'Total'=>$total_rows));
} 

echo json_encode($array);

$mysqli->close();

Morris JS

$.getJSON("js/morris.php", function (json) { 
    Morris.Area({
    element: 'morris-area-chart',
    data: json,
    xkey: 'Year',
     xLabelFormat: function (x) {
              var IndexToMonth = [ "Jan", "Feb", "Mar", "Apr", "Mar", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
              var month = IndexToMonth[ x.getMonth() ];
              var year = x.getFullYear();
              return month + ' ' + year;
          },
    xLabels: 'month',     
    ykeys: ['Numb','Total'],
    labels: ['Signups / Renewals','Total Active Members'],
    pointSize: 2,
    hideHover: 'auto',
    resize: true,
dateFormat: function (x) { 
        var d = new Date(x);
        var MyDateString;
        d.setDate(d.getDate());         
        var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
        return ("0" + d.getDate()).slice(-2) +' '+monthNames[d.getMonth()]+' '+d.getFullYear();
        }
});
return false;
});

我的JSON输出是

[{"Year":"2016-10-27","Numb":"1","Total":11},{"Year":"2016-10-28","Numb":"1","Total":11},{"Year":"2016-10-31","Numb":"1","Total":11},{"Year":"2016-11-02","Numb":"1","Total":11},{"Year":"2016-11-05","Numb":"1","Total":11},{"Year":"2016-11-07","Numb":"1","Total":11},{"Year":"2016-11-08","Numb":"1","Total":11},{"Year":"2016-11-09","Numb":"1","Total":11},{"Year":"2016-11-10","Numb":"1","Total":11},{"Year":"2016-11-10","Numb":"1","Total":11},{"Year":"2016-11-16","Numb":"1","Total":11}]

从上面可以看出,JSON输出有两个相同的记录

{"Year":"2016-11-10","Numb":"1","Total":11},{"Year":"2016-11-10","Numb":"1","Total":11}

这是莫里斯图表上只有一条记录。在这种情况下,它只有一个人在11月10日签约,实际上它是两个......

仅限FYI - TOTAL就是 - 总注册数量。虽然我喜欢把它作为一个总计,但我也无法解决这个问题。所以我不要担心,除非有一个简单的解决方案。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

提出解决方案 - 似乎有效 - 到目前为止....

代替

SELECT DateAdded, COUNT(*) FROM details GROUP BY DateAdded

SELECT DateAdded, COUNT(*) FROM details GROUP BY DATE_FORMAT(DateAdded,"%Y-%m-%d")

现在正在处理一个正在运行的总计...