2011-09-23 45 views
0

我有一个MySQL数据库中的一些价格数据,我想显示使用HighCharts/HighStock但我不知道我怎么能真正去获取这个数据从MySQL (通过DBslayer作为JSON层)并显示在高图表中(我在他们的网站上找到的示例没有帮助,并且搜索周围没有好的内容)。JSON,HighCharts/HighStock,DBSlayer - 数据显示

所以基本上系统是这样的:

MySQL <---> DBSlayer Service <---> JSON Requests to DBSlayer <---> Web page with charts - send query to DBSLayer 

MySQL的查看简而言之DBSlayer查询看起来是这样的:

DATE TIME | Symbol1 | Price 1 | Symbol2 | Price 2 | Price3 
2011-09-01| ABC  | 12.3 | XYZ  | 67.8 | 0.0852 

还是一个更好的例子是从查询返回的JSON到DBSlayer:

{"RESULT" : {"HEADER" : ["id" , , "authorID" , "msgDate" , "obj_obj" , "obj_subj" , "obj_diff" , "subj_pos" , "subj_neg" , "subj_diff" , "pos_lex" , "neg_lex" ] , 
    "ROWS" : [["4e0f1c393bfbb6aa4b7278c2" , "27" , "2011-06-30 13:59:47" , 0.0275171 , 0.972483 , -0.944966 , 0.993814 , 0.00618577 , 0.987628 , 1 , 0 ] , 
    ["4e0f1c393bfbb6aa4b7278c3" , "36324" , "2011-06-30 13:59:31" , 0.364953 , 0.635047 , -0.270095 , 0.0319281 , 0.968072 , -0.936144 , 3 , 1 ] , 
    ["4e0f1c393bfbb6aa4b7278c4" , "12134" , "2011-06-30 13:59:28" , 0.0112589 , 0.988741 , -0.977482 , 0.857735 , 0.142265 , 0.715469 , 1 , 1 ] ] , 
    "TYPES" : ["MYSQL_TYPE_VAR_STRING" , "MYSQL_TYPE_VAR_STRING" , "MYSQL_TYPE_DATETIME" , "MYSQL_TYPE_DOUBLE" , "MYSQL_TYPE_DOUBLE" , "MYSQL_TYPE_DOUBLE" , "MYSQL_TYPE_DOUBLE" , "MYSQL_TYPE_DOUBLE" , "MYSQL_TYPE_DOUBLE" , "MYSQL_TYPE_DOUBLE" , "MYSQL_TYPE_LONG" } , "SERVER" : "db-webPrices"} 

我应该如何将此部署到High Charts?我应该首先使用Node.js来包装查询(有Node.js到DBSlayer库,但他们不工作与最新版本的Node.js

我将如何使用JQuery来获取此数据和格式HighStock图表像这样的:http://www.highcharts.com/stock/demo/multiple-series/gray

基本HighCharts使用CSV文件作为数据源演示看起来像这样:

$(function() { 
     var seriesOptions = [], 
      yAxisOptions = [], 
      seriesCounter = 0, 
      names = ['DJI', 'SENTIMENT', 'GOOG', 'GS', 'SENTIMENT-Z', 'DJI-Z'], 
      colors = Highcharts.getOptions().colors; 

     $.each(names, function(i, name) { 

      $.get(name +'.csv', function(csv, state, xhr) { 

       // inconsistency 
       if (typeof csv != 'string') { 
        csv = xhr.responseText; 
       } 

       // parse the CSV data 
       var data = [], header, comment = /^#/, x; 

       $.each(csv.split('\n'), function(i, line){ 
        if (!comment.test(line)) { 
         if (!header) { 
          header = line; 
         } 
         else { 
          var point = line.split(';'), date = point[0].split('-'); 

          x = Date.UTC(date[2], date[1] - 1, date[0]); 

          if (point.length > 1) { 
           // use point[4], the close value 
           data.push([ 
            x, 
            parseFloat(point[4]) 
           ]); 
          } 
         } 
        } 
       }); 

       seriesOptions[i] = { 
        name: name, 
        data: data, 
        yAxis: i 
       }; 

       // create one y axis for each series in order to be able to compare them 
       yAxisOptions[i] = { 
        alternateGridColor: null, 
        gridLineWidth: i ? 0 : 1, // only grid lines for the first series 
        opposite: i ? true : false, 
        minorGridLineWidth: 0, 
        title: { 
         text: name, 
         style: { 
          color: colors[i] 
         } 
        }, 
        lineWidth: 2, 
        lineColor: colors[i] 
       }; 

       // As we're loading the data asynchronously, we don't know what order it will arrive. So 
       // we keep a counter and create the chart when all the data is loaded. 
       seriesCounter++; 

       if (seriesCounter == names.length) { 
        createChart(); 
       } 
      }); 
     }); 



     // create the chart when all data is loaded 
     function createChart() { 

      chart = new Highcharts.StockChart({ 
       chart: { 
        renderTo: 'container', 
        alignTicks: false 
       }, 

       rangeSelector: { 
        selected: 1 
       }, 

       title: { 
        text: null 
       }, 

       xAxis: { 
        type: 'datetime', 
        maxZoom: 14 * 24 * 3600000, // fourteen days 
        title: { 
         text: null 
        } 
       }, 
       yAxis: yAxisOptions, 

       series: seriesOptions 
      }); 
     } 

    }); 
    </script> 
    <script type="text/javascript" src="js/themes/gray.js"></script> 

任何示例/代码将不胜感激

!干杯!

回答

0

如果您查看您提供的演示页面的源代码,可以看到它是如何处理CSV数据的。 JSON结果更容易使用。

更新:documentation向您显示有关数据外观的更多信息。

+1

是的,谢谢,我可以看到这一点,已经使用了CSV的例子,它的一切工作,但CSV并不是实时的,所以它没有多大帮助。我不知道如何使用JSON结果。如果你能提供一个例子说明如何获取JSON结果并将其解析为highCharts(最好是刷新),那就太棒了! – NightWolf

+0

$ .get指向一个URL来检索csv文件。在你的情况下,我会指向一个返回你的json的url,它不必指向一个静态文件。关于如何做到这一点,highchart网站上有样本。文档和支持非常好,所以请查看论坛。另外检查[这篇文章](http://stackoverflow.com/questions/4210879/reload-chart-data-via-json-with-highcharts)。 – pritaeas