2016-04-26 6 views
2

Ich möchte Highcharts (bar) mit meiner Datenbank verwenden, aber ich habe Probleme, wie Sie die JSON mit meiner Auswahl zu bringen.MYSQL - Wählen Sie MIN und MAX Jahr und füllen Sie die Lücken

Ich habe drei Ebene: Gold, Silber, Platin und ich brauche das Minimum Jahr und maximal Jahr zu erhalten und die Lücken zu schließen, wenn das Niveau in einigen Jahren nicht vorhanden ist

Ich habe diese select:

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 

Mein Ergebnis:

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 

In meinem Ergebnis I don ‚T haben Silber und Platin für das Jahr 2011, und ich möchte das Silber und Platin in der Liste setzen, aber mit number_level (n_level) mit 0

Meine PHP:

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

Meine PHP Ergebnis :

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

Aber mein Ziel ist:

[{"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]}] 

Vielen Dank für jede Hilfe.

Ergebnis nach @Tin Tran Antwort:

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

Dieser Code wird mit Highcharts wirklich gut funktioniert. Nochmals vielen Dank @Tin Tran.

+0

Könnten Sie die Datenbanktabelle und Inhalt –

+0

diese Zeile sieht komisch '$ row_gold [ 'data'] [] = $ r [Beitrag 'Gold']; 'Gold'; 'Was ist das extra' 'Gold '' am Ende für? –

+0

Sorry, vergiss das Gold nicht. :) –

Antwort

1

Ich bin nicht vertraut PHP, aber ich denke, basierend auf Ihrem Ziel der JSON, diese Abfrage könnte Ihnen das Ergebnis Sie sind danach.

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; 

Ergebnis:

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

danke für die Idee, es funktioniert wunderbar. –

Verwandte Themen