sql >> データベース >  >> RDS >> Mysql

Highchartsの特定のシリーズにグループデータを入力します

    フィドルを見ると、HighChartsに期待される出力は次のようになります。

    1:カテゴリデータ

    • 日付の配列である必要があります。
    • 重複を削除し、昇順/降順のいずれかを選択して、連続したグラフを表示してください。
    "categories":["2019-02-07", "2019-02-08", "2019-02-09", "2019-02-12", "2019-02-13", "2019-02-14"]
    

    2:シリーズデータ

    • これはオブジェクトの配列であり、各オブジェクトには2つのプロパティnameが含まれます。 およびdata
    • データにはnが必要です categoriesの場合は値なし 配列にはnがあります 値とそれぞれが同じインデックスに対応します。
    • 各クラスの各日付のデータがないため、そこに0を追加します。

    したがって、データは次のようになります

    "series":[
          {
             "name":"class 1",
             "data":[45,0,166,78,0,0]
          },
          {
             "name":"class 2",
             "data":[0,64,0,64,627,0]
          },
          {
             "name":"class 3",
             "data":[0,0,0,0,87,352]
          }
       ]
    

    ファイナルフィドル これは、以下のコードを使用してPHPで実現できます:

    $arrDates = [];
    $arrClass = [];
    $arrData  = [];
    
    while ( $row = $query->fetch(PDO:: FETCH_ASSOC)) {
      $arrDates[] = $row['dates'];
      $arrClass[] = $row['class'];
      $arrData[$row['class'] . ':' . $row['dates']] = $row['marks']; // to identify for which date & class this marks belong to, we can directly search for index.
    }
    
    $arrDates = array_unique($arrDates);
    sort($arrDates);
    $arrClass = array_unique($arrClass);
    
    // Create series data
    $arrSeriesData = [];
    foreach($arrClass as $strClass){
      $tempArr = ['name' =>  $strClass];
      foreach($arrDates as $strDate){
          $tempArr['data'][] = isset($arrData[$strClass . ':' . $strDate]) ? intval($arrData[$strClass . ':' . $strDate]) : 0;
      }
    
      $arrSeriesData[] = $tempArr;
    }
    
    
    $response = ['categories' => $arrDates, 'series' => $arrSeriesData];
    
    echo json_encode($response);
    
    Output:
    {"categories":["2019-02-07","2019-02-08","2019-02-09","2019-02-12","2019-02-13","2019-02-14"],"series":[{"name":"class 1","data":[45,0,166,78,0,0]},{"name":"class 2","data":[0,64,0,64,627,0]},{"name":"class 3","data":[0,0,0,0,87,352]}]}
    

    上記を反映するようにJavaScriptコードを更新します

    $(document).ready(function() {
        $(function() {
            $.getJSON('data.php', function(data) {
                // Create the chart
                Highcharts.chart('container', {
                    title: {
                        text: 'class Marks'
                    },
    
                    xAxis: {
                        categories: data.categories
                    },
                    series: data.series,
    
                });
            });
        });
    });
    



    1. SQLで日付の範囲で移動平均を行うにはどうすればよいですか?

    2. SQLWHERE列=すべて

    3. コレクションを持たずにEloquentBuilderを使用してINTERSECTを作成するにはどうすればよいですか?

    4. 機能をPDOに変更