2016-04-26 7 views
2

を埋める私は自分のデータベースとHighcharts(バー)を使用したいが、私は私の選択を使用してJSONをもたらすためにどのように苦労しています。MYSQL - MINとMAXの年を選択し、ギャップ

は、私は三つのレベルがあります:ゴールド、シルバー、プラチナを、そのレベルは、いくつかの年

に存在しない場合、私は、私はこの選択を持っている最小年最大の年を取得し、ギャップをカバーする必要があります。

select B.year, A.level, COUNT(B.id_level) as n_level from level AS A 
inner join company_level AS B ON A.id_level = B.id_level 
GROUP BY B.id_level, B.year 
ORDER BY B.year 

マイ結果:私の結果Iドンで

year level  n_level 
2010 Siver  1 
2010 Platinum 2 
2010 Gold  2 
2011 Gold  1 
2013 Gold  1 
2014 Platinum 1 
2015 Silver  1 

$rows = mysqli_query($this->conn, $query); 
$bln = array(); 
$bln['name'] = 'Year'; 
$row['name'] = 'Level'; 

$year =""; 
while ($r = mysqli_fetch_array($rows)) { 
    if($year !== $r['year']){ 
     $bln['data'][] = $r['year']; 
    } 
    $row['data'][] = $r['n_level']; 
    $year = $r['year']; 

} 
$rslt = array();    

array_push($rslt, $bln); 
array_push($rslt, $row); 

print json_encode($rslt, JSON_NUMERIC_CHECK); 

マイPHP結果:0

マイPHPで(n_levelを)「Tは、2011年のシルバーとプラチナを持っていると私は、リストにシルバーとプラチナを入れたいけどnumber_levelと:

[{"name":"Year","data":[2010,2011,2013,2014,2015]},{"name":"Level","data":[2,2,1,1,1,1,1]}] 

しかし、私の目標は次のとおりです。

[{"name":"Year","data":[2010,2011,2013,2014,2015]},{"name":"Gold","data":[2,2,1,1,1]}, {"name":"Silver","data":[1,0,0,0,1]}, {"name":"Platinum","data":[2,2,1,1,1]}] 

は、任意の助けてくれてありがとう。 @Tinトランの解答後

結果:

$rows = mysqli_query($this->conn, $query); 
       $bln = array(); 
       $bln['name'] = 'Year'; 
       $row_gold['name'] = 'Gold'; 
       $row_platinum['name'] = 'Platinum';    
       $row_silver['name'] = 'Silver';      

       while ($r = mysqli_fetch_array($rows)) { 
       $bln['data'][] = $r['year']; 
       $row_gold['data'][] = $r['gold']; 
       $row_platinum['data'][] = $r['platinum'];    
       $row_silver['data'][] = $r['silver']; ''; 

       } 
       $rslt = array();    

       array_push($rslt, $bln); 
       array_push($rslt, $row_gold); 
       array_push($rslt, $row_platinum);    
       array_push($rslt, $row_silver);    
       print json_encode($rslt, JSON_NUMERIC_CHECK); 

このコードはHighchartsで本当にうまく機能します。 @ Tin Tranにもう一度ありがとう。

+0

を使用すると、データベースのテーブルと内容 –

+0

を投稿できるこの行が面白い '$のrow_gold [ 'データ']を探します[] = $ R [ 'ゴールド']; 'ゴールド'; '余分な「金」は何ですか;最後には? –

+0

申し訳ありませんが、そこに金を気にしません。 :) –

答えて

1

私は馴染みのPHPではないが、私は、JSONのあなたの目標に基づいて、 このクエリはあなたが後にしている結果与えるかもしれないと思います。

SELECT B.year, 
     SUM(A.level = 'Gold') as Gold, 
     SUM(A.level = 'Silver') as Silver, 
     SUM(A.level = 'Platinum') as Platinum 
FROM level AS A 
INNER JOIN company_level AS B ON A.id_level = B.id_level 
GROUP BY B.year 
ORDER BY B.year; 

結果:

year Gold Silver Platinum 
2010 2  1  2 
2011 1  0  0 
2013 1  0  0 
2014 0  0  1 
2015 0  1  0 

sqlfiddle - >http://sqlfiddle.com/#!9/59893/3

+0

は、それが素晴らしい作品のアイデアをありがとうございました。 –

関連する問題