如何动态查询数据库并在仪表板上绘制值?

Posted

技术标签:

【中文标题】如何动态查询数据库并在仪表板上绘制值?【英文标题】:How to query to DB & plot the values on dashboard dynamically? 【发布时间】:2016-06-26 09:04:38 【问题描述】:

我对仪表板的东西很陌生。学习 phpjavascript。我正在尝试在已经可用的谷歌图表的帮助下创建一个饼图。我可以做到(因为,数据是硬编码的)。我正在尝试用动态值绘制饼图(查询数据库并在饼图中绘制值)。我正在尝试这样做,但做不到。你能帮我实现这个吗(mysql,比如 2 列名称和分数)。

工作代码[用于静态数据]:

<html>
  <head>
    <script type="text/javascript" src="loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', 'packages':['corechart']);
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() 

        **var data = google.visualization.arrayToDataTable([
          ['Task', 'Hours per Day'],
          ['Work',     11],
          ['Eat',      2],
          ['Commute',  2],
          ['Watch TV', 2],
          ['Sleep',    7]
        ]);**

        var options = 
          title: 'My Daily Activities'
        ;

        var chart = new google.visualization.PieChart(document.getElementById('piechart'));

        chart.draw(data, options);
      
    </script>
  </head>
  <body>
    <div id="piechart" style="width: 900px; height: 500px;"></div>
  </body>
</html>

我了解上面突出显示的部分负责加载静态数据。

尝试使用与 db 相关的 PHP 嵌入上面的脚本。 可能,我可能会错过以正确的方式调用它。你能帮我提供缺少的接口吗?我对所有这些技术都很陌生。

<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbName = "test";
$conn = new mysqli($servername, $username, $password, $dbName);
if ($conn->connect_error) 
  die("Connection failed: " . $conn->connect_error);


$query = "SELECT * FROM student";

$result = $conn->query($query);

$jsonArray = array();

if ($result->num_rows > 0) 

  while($row = $result->fetch_assoc()) 
    $jsonArrayItem = array();
    $jsonArrayItem['label'] = $row['Name'];
    $jsonArrayItem['value'] = $row['Scores'];
    array_push($jsonArray, $jsonArrayItem);
  


$conn->close();

header('Content-type: application/json');

echo json_encode($jsonArray);
?>

【问题讨论】:

【参考方案1】:

简介

好的,如果您的代码可以正常运行,我想您目前已经制作了一个 php 脚本,该脚本会以您需要的格式输出 JSON 文档。

现在您需要使用 javascript 实际加载数据并将其输入图表 API。

因此,您需要从php script 加载它,而不是在var data = google.visualization.arrayToDataTable 处提供硬编码数组。

查看以下链接,它们可以使用纯 JS 或使用 JQuery 解决此问题:

How to get JSON from URL in Javascript? http://codepen.io/KryptoniteDove/post/load-json-file-locally-using-pure-javascript

JQuery 示例

请记住,调用是异步的,因此您需要在(或由)处理 ajax 调用的侦听器中触发图表逻辑。

$.getJSON('http://localhost/myApp/myScript.php&callback', function(data) 
    var data = google.visualization.arrayToDataTable(data);

        var options = 
          title: 'My Daily Activities'
        ;

        var chart = new google.visualization.PieChart(document.getElementById('piechart'));

        chart.draw(data, options);
);

【讨论】:

以上是关于如何动态查询数据库并在仪表板上绘制值?的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL 输入日期范围传递给 SHINY 中的查询

动态查询数据库以检查值

Entity Framework Core 中的动态查询执行

SSRS:来自多个数据库的联合数据

如何在一个 SQL 查询中检索值并在存储过程中使用它?

如何在 Grafana 中进行 Simple-JSON 变量模板查询?