如何使用php中的图表Js用MySQL中的数据绘制折线图
How to draw a line graph with data in MySQL using chart Js in php
我想使用 MySQL table 中的以下数据绘制折线图。
日期 - 12 月 10 日、12 月 11 日、12 月 12 日、12 月 13 日、12 月 14 日、12 月 15 日、12 月 16 日、12 月 17 日、12 月 18 日、12 月 19 日、12 月 20 日
出席人数 - 65、58、56、78、51、54、69、35、68、43、52
我做了两个查询来提取数据并存储在 2 个数组中,即 $data1
和 $data2
使用下面的代码
$con = new mysqli($servername, $username, $password, $db);
$myquery1 = "select date from Table_attendance";
$query1 = mysqli_query($con, $myquery1);
if ( ! $query1 ) {
echo mysqli_error();
die;
}
for ($x = 0; $x < mysqli_num_rows($query1); $x++) {
$data1[] = mysqli_fetch_assoc($query1);
}
$my1 = "select attendance from Table_attendance";
$qu1 = mysqli_query($con, $my1);
if ( ! $qu1 ) {
echo mysqli_error();
die;
}
for ($x = 0; $x < mysqli_num_rows($qu1); $x++) {
$data2[] = mysqli_fetch_assoc($qu1);
}
然后我使用以下代码将两个数组 $data1
和 $data2
编码为 json 格式。
$encod = json_encode($data1);
$encod2 = json_encode($data2);
数组的输出如下。
[{"date":"2021-12- 10"},{"date":"2021-12-11"},{"date":"2021-12-12"},{"date":"2021-12-13"},{"date":"2021-12-14"},{"date":"2021-12-15"},{"date":"2021-12-16"},{"date":"2021-12-17"},{"date":"2021-12-18"},{"date":"2021-12-19"},{"date":"2021-12-20"}]
[{"attendance ":"65"},{"attendance ":" 58 "},{"attendance ":" 56"},{"attendance":" 78 "},{"attendance ":" 51 "},{"attendance ":" 54"}{"attendance ":"69 "},{"attendance ":"35"},{"attendance":"68"},{"attendance":"43"},{"attendance ":"52"}]
最后我尝试按如下方式传递编码值以绘制成折线图,但没有成功。
<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
<canvas id="myChart" style="width:100%;max-width:600px"></canvas>
<script>
var xValues = <?php echo $encod?>;
var yValues = <?php echo $encod2?>;
new Chart("myChart", {
type: "line",
data: {
labels: xValues,
datasets: [{
fill: false,
lineTension: 0,
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: yValues
}]
},
options: {
title: {display: true, text: 'Custom Chart Title'},
legend: {display: false},
scales: {
yAxes: [{ticks: {min: 6, max:16}}],
}
}
});
</script>
请帮我评估一下。如果还有比我更好的代码请分享。
您没有正确传递图表对象中的数据。你可以在php或js.
中转换对象
下面的 js 示例。
const ctx = document.getElementById("myChart").getContext("2d");
const xValues = [
{ date: "2021-12-10" },
{ date: "2021-12-11" },
{ date: "2021-12-12" },
{ date: "2021-12-13" },
{ date: "2021-12-14" },
{ date: "2021-12-15" },
{ date: "2021-12-16" },
{ date: "2021-12-17" },
{ date: "2021-12-18" },
{ date: "2021-12-19" },
{ date: "2021-12-20" },
];
const yValues = [
{ attendance: "65" },
{ attendance: "58" },
{ attendance: "56" },
{ attendance: "78" },
{ attendance: "51" },
{ attendance: "54" },
{ attendance: "69" },
{ attendance: "35" },
{ attendance: "68" },
{ attendance: "43" },
{ attendance: "52" },
];
const x = xValues.map(item => item.date);
const y = yValues.map(item => item.attendance);
new Chart(ctx, {
type: "line",
data: {
labels: x,
datasets: [
{
label: "Dataset 1",
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: y,
},
],
},
options: {
responsive: true,
plugins: {
legend: {
position: "top",
},
title: {
display: true,
text: "Chart.js Line Chart",
},
},
},
});
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
编辑
完整 php 示例
<?php
$con = new mysqli($servername, $username, $password, $db);
$myquery1 = "select date from Table_attendance";
$result1 = mysqli_query($con, $myquery1);
$rowsDate = mysqli_fetch_all($result1, MYSQLI_ASSOC);
$xValues = array_map(function ($item) {
return $item['date'];
}, $rowsDate);
$myquery2 = "select attendance from Table_attendance";
$result2 = mysqli_query($con, $myquery2);
$rowsAtd = mysqli_fetch_all($result2, MYSQLI_ASSOC);
$yValues = array_map(function ($item) {
return $item['attendance'];
}, $rowsAtd);
?>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
<script>
const x = <?php echo json_encode($xValues) ?>;
const y = <?php echo json_encode($yValues) ?>;
new Chart(ctx, {
type: "line",
data: {
labels: x,
datasets: [{
label: "Dataset 1",
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: y,
}, ],
},
options: {
responsive: true,
plugins: {
legend: {
position: "top",
},
title: {
display: true,
text: "Chart.js Line Chart",
},
},
},
});
</script>
如回答中所述,问题出在编码上。事实上,应该传递的数组应该是 var xValues = [1,2,3,4,5,6]
格式。但是我得到的是 var xValues = [{1},{2},{3},{4},{5},{6}]
格式。无论如何,如果将来有人需要,我将 post 我的整个代码。非常感谢那些试图帮助我的人。
完整代码如下
$con = new mysqli($servername, $username, $password, $db);
// getting date column from Table_attendance table
$myquery1 = "select date from Table_attendance";
$query1 = mysqli_query($con, $myquery1);
if ( ! $query1 ) {
echo mysqli_error();
die;
}
$a1 ="";
for ($x = 0; $x < mysqli_num_rows($query1); $x++) {
$data1 = mysqli_fetch_assoc($query1);
if($a1 != ""){
$a1 = $a1.",'".$data1['date']."'";
}
else {
$a1 = "'".$data1['date']."'";
}
}
// getting attendance column from Table_attendance table
$my1 = "select attendance from Table_attendance";
$qu1 = mysqli_query($con, $my1);
if ( ! $qu1 ) {
echo mysqli_error();
die;
}
$a2 ="";
for ($x = 0; $x < mysqli_num_rows($qu1); $x++) {
$data2 = mysqli_fetch_assoc($qu1);
if($a2 != ""){
$a2 = $a2.",".$data2['attendance'];
}
else {
$a2 = $data2['attendance'];
}
}
?>
<?php //ploting the graph ?>
<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
<canvas id="myChart" style="width:100%;max-width:600px"></canvas>
<script>
var xValues = <?php echo '['.$a1.']'; ?>;
var yValues = <?php echo '['.$a2.']'; ?>;
new Chart("myChart", {
type: "line",
data: {
labels: xValues,
datasets: [{
fill: false,
lineTension: 0,
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: yValues
}]
},
options: {
title: {display: true, text: 'Total attendance'},
legend: {display: false},
scales: {
yAxes: [{ticks: {min: 10, max:100}}],
}
}
});
</script>
我想使用 MySQL table 中的以下数据绘制折线图。
日期 - 12 月 10 日、12 月 11 日、12 月 12 日、12 月 13 日、12 月 14 日、12 月 15 日、12 月 16 日、12 月 17 日、12 月 18 日、12 月 19 日、12 月 20 日 出席人数 - 65、58、56、78、51、54、69、35、68、43、52
我做了两个查询来提取数据并存储在 2 个数组中,即 $data1
和 $data2
使用下面的代码
$con = new mysqli($servername, $username, $password, $db);
$myquery1 = "select date from Table_attendance";
$query1 = mysqli_query($con, $myquery1);
if ( ! $query1 ) {
echo mysqli_error();
die;
}
for ($x = 0; $x < mysqli_num_rows($query1); $x++) {
$data1[] = mysqli_fetch_assoc($query1);
}
$my1 = "select attendance from Table_attendance";
$qu1 = mysqli_query($con, $my1);
if ( ! $qu1 ) {
echo mysqli_error();
die;
}
for ($x = 0; $x < mysqli_num_rows($qu1); $x++) {
$data2[] = mysqli_fetch_assoc($qu1);
}
然后我使用以下代码将两个数组 $data1
和 $data2
编码为 json 格式。
$encod = json_encode($data1);
$encod2 = json_encode($data2);
数组的输出如下。
[{"date":"2021-12- 10"},{"date":"2021-12-11"},{"date":"2021-12-12"},{"date":"2021-12-13"},{"date":"2021-12-14"},{"date":"2021-12-15"},{"date":"2021-12-16"},{"date":"2021-12-17"},{"date":"2021-12-18"},{"date":"2021-12-19"},{"date":"2021-12-20"}]
[{"attendance ":"65"},{"attendance ":" 58 "},{"attendance ":" 56"},{"attendance":" 78 "},{"attendance ":" 51 "},{"attendance ":" 54"}{"attendance ":"69 "},{"attendance ":"35"},{"attendance":"68"},{"attendance":"43"},{"attendance ":"52"}]
最后我尝试按如下方式传递编码值以绘制成折线图,但没有成功。
<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
<canvas id="myChart" style="width:100%;max-width:600px"></canvas>
<script>
var xValues = <?php echo $encod?>;
var yValues = <?php echo $encod2?>;
new Chart("myChart", {
type: "line",
data: {
labels: xValues,
datasets: [{
fill: false,
lineTension: 0,
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: yValues
}]
},
options: {
title: {display: true, text: 'Custom Chart Title'},
legend: {display: false},
scales: {
yAxes: [{ticks: {min: 6, max:16}}],
}
}
});
</script>
请帮我评估一下。如果还有比我更好的代码请分享。
您没有正确传递图表对象中的数据。你可以在php或js.
中转换对象下面的 js 示例。
const ctx = document.getElementById("myChart").getContext("2d");
const xValues = [
{ date: "2021-12-10" },
{ date: "2021-12-11" },
{ date: "2021-12-12" },
{ date: "2021-12-13" },
{ date: "2021-12-14" },
{ date: "2021-12-15" },
{ date: "2021-12-16" },
{ date: "2021-12-17" },
{ date: "2021-12-18" },
{ date: "2021-12-19" },
{ date: "2021-12-20" },
];
const yValues = [
{ attendance: "65" },
{ attendance: "58" },
{ attendance: "56" },
{ attendance: "78" },
{ attendance: "51" },
{ attendance: "54" },
{ attendance: "69" },
{ attendance: "35" },
{ attendance: "68" },
{ attendance: "43" },
{ attendance: "52" },
];
const x = xValues.map(item => item.date);
const y = yValues.map(item => item.attendance);
new Chart(ctx, {
type: "line",
data: {
labels: x,
datasets: [
{
label: "Dataset 1",
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: y,
},
],
},
options: {
responsive: true,
plugins: {
legend: {
position: "top",
},
title: {
display: true,
text: "Chart.js Line Chart",
},
},
},
});
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
编辑 完整 php 示例
<?php
$con = new mysqli($servername, $username, $password, $db);
$myquery1 = "select date from Table_attendance";
$result1 = mysqli_query($con, $myquery1);
$rowsDate = mysqli_fetch_all($result1, MYSQLI_ASSOC);
$xValues = array_map(function ($item) {
return $item['date'];
}, $rowsDate);
$myquery2 = "select attendance from Table_attendance";
$result2 = mysqli_query($con, $myquery2);
$rowsAtd = mysqli_fetch_all($result2, MYSQLI_ASSOC);
$yValues = array_map(function ($item) {
return $item['attendance'];
}, $rowsAtd);
?>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
<script>
const x = <?php echo json_encode($xValues) ?>;
const y = <?php echo json_encode($yValues) ?>;
new Chart(ctx, {
type: "line",
data: {
labels: x,
datasets: [{
label: "Dataset 1",
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: y,
}, ],
},
options: {
responsive: true,
plugins: {
legend: {
position: "top",
},
title: {
display: true,
text: "Chart.js Line Chart",
},
},
},
});
</script>
如回答中所述,问题出在编码上。事实上,应该传递的数组应该是 var xValues = [1,2,3,4,5,6]
格式。但是我得到的是 var xValues = [{1},{2},{3},{4},{5},{6}]
格式。无论如何,如果将来有人需要,我将 post 我的整个代码。非常感谢那些试图帮助我的人。
完整代码如下
$con = new mysqli($servername, $username, $password, $db);
// getting date column from Table_attendance table
$myquery1 = "select date from Table_attendance";
$query1 = mysqli_query($con, $myquery1);
if ( ! $query1 ) {
echo mysqli_error();
die;
}
$a1 ="";
for ($x = 0; $x < mysqli_num_rows($query1); $x++) {
$data1 = mysqli_fetch_assoc($query1);
if($a1 != ""){
$a1 = $a1.",'".$data1['date']."'";
}
else {
$a1 = "'".$data1['date']."'";
}
}
// getting attendance column from Table_attendance table
$my1 = "select attendance from Table_attendance";
$qu1 = mysqli_query($con, $my1);
if ( ! $qu1 ) {
echo mysqli_error();
die;
}
$a2 ="";
for ($x = 0; $x < mysqli_num_rows($qu1); $x++) {
$data2 = mysqli_fetch_assoc($qu1);
if($a2 != ""){
$a2 = $a2.",".$data2['attendance'];
}
else {
$a2 = $data2['attendance'];
}
}
?>
<?php //ploting the graph ?>
<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
<canvas id="myChart" style="width:100%;max-width:600px"></canvas>
<script>
var xValues = <?php echo '['.$a1.']'; ?>;
var yValues = <?php echo '['.$a2.']'; ?>;
new Chart("myChart", {
type: "line",
data: {
labels: xValues,
datasets: [{
fill: false,
lineTension: 0,
backgroundColor: "rgba(0,0,255,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: yValues
}]
},
options: {
title: {display: true, text: 'Total attendance'},
legend: {display: false},
scales: {
yAxes: [{ticks: {min: 10, max:100}}],
}
}
});
</script>