2016-11-15 15 views
0

次のコードを使用して、MorrisチャートにMySQLデータを表示しています。すべてがうまくいく作品同じ日に2つ以上のレコードがある場合を除き、モリスチャートでは1つのレコードとしてのみ表示されます。MorrisチャートでJSON結果を正しく表示する

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(); 

モリス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} 

これは、Morrisチャート上に1つのレコードしか表示されません。このケースでは、11月16日にサインアップされたのは1人だけです。実際には2人でした。

FYI ONLY - TOTALは、登録数の合計です。私はこれを積算しているのが好きですが、私はそれを解決することはできません。だから、単純な解決策がない限り、それを心配してはいけません。

私には何が欠けていますか?

+0

私は、 'SELECT dateAdded、COUNT(*)FROM details GROUP BY DateAdded'や' array( 'Year' => $ year、 'Nu mb '=> $ row [' COUNT(*) ']、'合計 '=> $ total_rows) ' – Fraser4655

答えて

0

は解決策が出ている - 動作しているようです -

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

が今だけ実行されている総に取り組んで

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

を置き換え....今のところ.. 。

関連する問題