javascript - 如何使用 Chart.js 将所有相关数据显示到同一图表上的一个特定项目?
问题描述
所以我有以下场景:
我首先必须从下拉列表中选择我的项目,然后生成一个包含与项目相关的所有数据的图表。
这就是我想要的样子。正如你所看到的,它有所有年份的数据作为右侧的标签,月份总是在底部。(蓝色)我该如何处理这样的事情?
这是我的 index.php
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootswatch/4.5.2/materia/bootstrap.min.css" integrity="sha384-B4morbeopVCSpzeC1c4nyV0d0cqvlSAfyXVfrPJa25im5p+yEN/YmhlgQP/OyMZD" crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="row">
<div class="col text-center" style="margin-top: 25px; margin-bottom: 25px;">
<select class="custom-select" id="selProject">
<option value="IKEA" >Ikea Alexandra</option>
<option value="UWC">United World College</option>
<option value="DMHS">Desert Mountain High School</option>
<option value="MAN">Hospital Managual</option>
<option value="FHW">Fernheizwerk Graz</option>
<option value="WWA">Wasserwerk Andritz</option>
<option value="PRIS">Prishtina</option>
<option value="BERG">Fleischwaren Berger</option>
<option value="ALAIN">Al Ain</option>
<option value="GHS">Gasthaus Schwaab</option>
<option value="AVL" selected="">AVL List</option>
<option value="GROT">Grottenhofstraße</option>
<option value="JUD">Judendorf</option>
<option value="BERL">Berliner Ring</option>
<option value="OBER">Oberzeiring</option>
<option value="COOL">Coolcabin</option>
<option value="DIGI">Digicell</option>
<option value="BRUE">Brüssel</option>
<option value="FKH">Friedrich Karl Höfe</option>
<option value="ERLA">Erlaaer Platz Wien</option>
<option value="ROES">Rösslergasse</option>
<option value="STAD">Stadion Liebenau</option>
<option value="MURZ">Fernwärme Mürzzuschlag</option>
</select>
</div>
</div>
<div class="row">
<div class="col" id="divGraph">
<!-- Graph goes here -->
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js" integrity="sha512-d9xgZrVZpmmQlfonhQUvTR7lMPtO7NkZMkA0ABN3PHCbKA5nqylQ/yWlFAyY6hYgdF1Qh6nYiuADWwKB4C2WSw==" crossorigin="anonymous"></script>
<script>
$(document).ready(function() {
$.ajax({
url: "http://localhost/solid3/queries.php",
type: "post",
data: {
project: "AVL"
},
success: function (bar_graph){
$("#divGraph").html(bar_graph);
$("#graph").chart = new Chart($("#graph"), $("#graph").data("settings"));
}
});
$("#selProject").change(function() {
$.ajax({
url: "http://localhost/solid3/queries.php",
type: "post",
data: {
project: $(this).val()
},
success: function (bar_graph){
$("#divGraph").html(bar_graph);
$("#graph").chart = new Chart($("#graph"), $("#graph").data("settings"));
}
})
});
});
</script>
</body>
</html>
这是我的querys.php
<?php
$mysqli = new MySQLi("localhost", "root", "", "monitoring_database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_errno;
}
isset($_POST["project"]) ? $project = $_POST["project"] : $project = "";
$ertrag = "";
$month = "";
$bar_graph = "";
$getData = "SELECT
monitoring_database.systems.display_name AS project,
monitoring_database.systems.name AS ShortName,
monitoring_database.systems.collector_area AS Kollektorfläche,
ROUND (AVG(monitoring_database.heat_meter_values.value)) AS Ertrag,
YEAR(monitoring_database.heat_meter_values.timestamp) AS Jahr,
MONTHNAME(monitoring_database.heat_meter_values.timestamp) AS Monat
FROM monitoring_database.systems
INNER JOIN monitoring_database.heat_meter
ON monitoring_database.systems.id = monitoring_database.heat_meter.system_id
INNER JOIN monitoring_database.heat_meter_values
ON monitoring_database.heat_meter.id = monitoring_database.heat_meter_values.heat_meter_id
GROUP BY project, jahr, monat
HAVING ShortName = '$project'";
$rows = $mysqli->query($getData);
$rowcount = $rows->num_rows;
if($rowcount > 0) {
while($r = $rows->fetch_assoc()) {
$ertrag .= '"' . $r['Ertrag'] . '",';
$month .= '"' . $r["Monat"] . '",';
}
}
$ertrag = substr($ertrag, 0, -1);
$month = substr($month, 0, -1);
$bar_graph = '
<canvas id="graph" data-settings=
\'{
"type": "bar",
"data":
{
"labels": [' . $month . '],
"datasets":
[{
"label": "' . $project . '",
"backgroundColor": "#000000",
"borderColor": "#000000",
"data": [' . $ertrag . ']
}]
},
"options":
{
"legend":
{
"display": true
}
}
}\'
></canvas>';
echo $bar_graph;
解决方案
推荐阅读
- python-3.x - 为特定数据选择 ε 有什么问题?
- ruby-on-rails - 如何扩展 ActionView::Template::Types
- xamarin - 使用 Real To Tap() 警报上的“确定”按钮
- arrays - 使用循环获取一组元素
- c++ - LOKI C++:“ScatterHierarchyTag”如何解决继承歧义?
- oracle - Oracle Pl/SQL 循环仅在记录插入表时返回
- regex - perl 单行中转义和捕获的正确语法是什么?
- python-3.x - 将字符串添加到列表正在创建字符列表
- sql-server - TSQL - 枢轴不返回所有行
- excel-formula - 在 Excel 中搜索后查找最后一个值