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

ハイチャートを使用してmysqlデータベースから折れ線グラフに動的データを追加します

    バックエンドが時間ごとにシリーズごとに単一のポイントを提供するグラフに複数のシリーズがあると仮定します。

    簡単にするために、ミリ秒単位で時間を返すことをお勧めします。私はPHPにあまり強くありませんが、要点は明らかだと思います

    <?php
    
    header("Content-type: text/json");
    
    
     include_once 'include/connection.php';
     $db = new DB_Class(); 
    
    
         $query = "select distinct idchip from datatable ";
         $result = mysql_query( $query );
         $rows = array();
         $count = 0;
    
         while( $row = mysql_fetch_array( $result ) ) {
             $SQL1 =     "SELECT datetime,temperature FROM `datatable` WHERE idchip=".$row['0']." ORDER BY datetime DESC limit 0,1 ";
    
            $serie = new StdClass;
            $serie->name = $row['0'];
            $result1 = mysql_query($SQL1);
    
            $points = array();
            while ($rows = mysql_fetch_array($result1)) {
               $points[] = array(strtotime($rows['0']) * 1000, $rows['1']);
            }
    
            $serie->data = $points;
            $series[] = $serie;
         }
    
    
    // Create a PHP array and echo it as JSON
    $ret = $series;
    echo json_encode($ret);
    ?>
    

    クライアント側のコードは次のようになります:

    var chart;
    var chartSeries = {};
    var latestTimeReported = {};
    
    function requestData() {
    
      $.ajax({
        url: 'live-server-data.php',
        success: function(seriesUpdate) {
    
          //in case initializer of highcharts is too quick - skip the update
          if (!chart) {
            setTimeout(requestData, 1000);
            return;
          }
    
          $.each(seriesUpdate, function (serieIndex, serieUpdate) {
            var existingSerie = chartSeries[serieUpdate.name];
            var newPoint = serieUpdate.data[0];
            var lastInsertedTime = latestTimeReported[serieUpdate.name];          
    
            if (lastInsertedTime  && lastInsertedTime < newPoint[0]) {
              console.log('Attempt inserting old data!!!!');
              return;
            }
    
            latestTimeReported[serieUpdate.name] = newPoint[0];
    
            if (existingSerie) {
              var shift = existingSerie.data.length > 20;
              existingSerie.addPoint(newPoint , true, shift);
            } else {
              var newSerie = chart.addSeries({                        
                name: serieUpdate.name,
                data: serieUpdate.data
              }, true);
              chartSeries[serieUpdate.name] = newSerie;
            }
    
          });
    
          // call it again after one second
          setTimeout(requestData, 1000);
        },
        cache: false
      });
    }
    
    $(document).ready(function() {
        chart = new Highcharts.Chart({
            chart: {
                renderTo: 'container',
                defaultSeriesType: 'spline',
                events: {
                    load: requestData
                }
            },
            title: {
                text: 'Live random data'
            },
            xAxis: {
                type: 'datetime',
                tickPixelInterval: 150,
                maxZoom: 20 * 1000
            },
            yAxis: {
                minPadding: 0.2,
                maxPadding: 0.2,
                title: {
                    text: 'Value',
                    margin: 80
                }
            },
            series: []
        });
    

    ここで新しい更新された例を見ることができます http://plnkr.co/edit/OqMofEGDadF9J3Uit8qD



    1. MySQL Math-クエリで相関を計算することは可能ですか?

    2. ユーザーrootでlocalhost:3306でMySQLに接続できませんでした

    3. SQLが機能していません

    4. ユニコーンレール用のデータベース接続プールが本当に必要ですか?