Javascript 谷歌图表显示标题作为标签
在谷歌图表中处理折线图。有一个问题,我不能显示作为标签的测量标题。我将进一步得到不同的测量值,现在我一次只能显示一个测量值 以下是数据库中的sql查询和输出: 这是可视化,如您所见,我希望routine.value显示标题:T_Badende_per_Time: 代码:Javascript 谷歌图表显示标题作为标签,javascript,php,sql,google-visualization,axis-labels,Javascript,Php,Sql,Google Visualization,Axis Labels,在谷歌图表中处理折线图。有一个问题,我不能显示作为标签的测量标题。我将进一步得到不同的测量值,现在我一次只能显示一个测量值 以下是数据库中的sql查询和输出: 这是可视化,如您所见,我希望routine.value显示标题:T_Badende_per_Time: 代码: <?php $con=mysql_connect("localhost","root","") or die("Failed to connect with database!!!!"); mysql
<?php
$con=mysql_connect("localhost","root","") or die("Failed to connect with database!!!!");
mysql_select_db("nih_bw", $con);
$sth = mysql_query("Select measurements.title, routines.value, routines.date, routines.time from routines, measure_routine, measurements Where routines.id=measure_routine.routine_id AND measure_routine.measure_id=measurements.id AND measurements.title='T_Badende_per_Time' order by routines.date, routines.time;");
$rows = array();
//flag is not needed
$flag = true;
$table = array();
$table['cols'] = array(
array('label' => 'routines.date' & 'routines.time', 'type' => 'datetime'),
array('label' => 'routines.value', 'type' => 'number'),
);
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
$temp = array();
// assumes dates are in the format "yyyy-MM-dd"
$dateString = $r['date'];
$dateArray = explode('-', $dateString);
$year = $dateArray[0];
$month = $dateArray[1] - 1; // subtract 1 to convert to javascript's 0-indexed months
$day = $dateArray[2];
// assumes time is in the format "hh:mm:ss"
$timeString = $r['time'];
$timeArray = explode(':', $timeString);
$hours = $timeArray[0];
$minutes = $timeArray[1];
$seconds = $timeArray[2];
$temp = array();
$temp[] = array('v' => "Date($year, $month, $day, $hours, $minutes, $seconds)");
$temp[] = array('v' => (string) $r['value']);
$rows[] = array('c' => $temp);
}
$table['rows'] = $rows;
$jsonTable = json_encode($table);
echo $jsonTable;
?>
<html>
<head>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable(<?=$jsonTable?>);
var options = {
/*width: 900, height: 900, */
title: 'Visualization',
curveType: 'function',
legend: { position: 'bottom' },
pointSize: 5,
vAxis: {title: "Values", titleTextStyle: {italic: false}},
hAxis: {title: "Time", titleTextStyle: {italic: false}},
explorer: {
actions: ['dragToZoom', 'rightClickToReset'],
axis: 'vertical'}
};
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>
好的,您需要设置vAxis.title
。您已经在第73行中设置了它(vAxis:{title:“Values”}
),但需要将它设置为PHP中的变量:
[...]
$vAxis = false;
while($r = mysql_fetch_assoc($sth)) {
// this will overwrite itself, it looks to me that in your case it doesn't matter
$vAxis = $r["title"];
[...]
然后输出它
vAxis: {title: "<?=$vAxis ?: "default title"; ?>"}
vAxis:{title:}
好的,您需要设置vAxis.title
。您已经在第73行中设置了它(vAxis:{title:“Values”}
),但需要将它设置为PHP中的变量:
[...]
$vAxis = false;
while($r = mysql_fetch_assoc($sth)) {
// this will overwrite itself, it looks to me that in your case it doesn't matter
$vAxis = $r["title"];
[...]
然后输出它
vAxis: {title: "<?=$vAxis ?: "default title"; ?>"}
vAxis:{title:}
好的,您需要设置vAxis.title
。您已经在第73行中设置了它(vAxis:{title:“Values”}
),但需要将它设置为PHP中的变量:
[...]
$vAxis = false;
while($r = mysql_fetch_assoc($sth)) {
// this will overwrite itself, it looks to me that in your case it doesn't matter
$vAxis = $r["title"];
[...]
然后输出它
vAxis: {title: "<?=$vAxis ?: "default title"; ?>"}
vAxis:{title:}
好的,您需要设置vAxis.title
。您已经在第73行中设置了它(vAxis:{title:“Values”}
),但需要将它设置为PHP中的变量:
[...]
$vAxis = false;
while($r = mysql_fetch_assoc($sth)) {
// this will overwrite itself, it looks to me that in your case it doesn't matter
$vAxis = $r["title"];
[...]
然后输出它
vAxis: {title: "<?=$vAxis ?: "default title"; ?>"}
vAxis:{title:}
如果您希望每个测量类型有一行,则需要通过测量来透视数据。title
。MySQL不支持PIVOT
语句,因此您必须像这样伪造它:
SELECT
routines.data,
routines.time,
SUM(IF(measurements.title = 'T_Badende_per_Time', , 0)) CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)) as T_Badende_per_Time,
SUM(IF(measurements.title = 'measure_2', CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)), 0)) as measure_2,
SUM(IF(measurements.title = 'measure_3', CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)), 0)) as measure_3
etc...
FROM
routines
INNER JOIN measure_routine ON routines.id = measure_routine.routine_id
INNER JOIN measurements ON measure_routine.measure_id = measurements.id
WHERE
<conditions>
GROUP BY routines.date, routines.time
ORDER BY routines.date, routines.time
如果希望每个度量类型有一行,则需要通过度量值来透视数据。title
。MySQL不支持PIVOT
语句,因此您必须像这样伪造它:
SELECT
routines.data,
routines.time,
SUM(IF(measurements.title = 'T_Badende_per_Time', , 0)) CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)) as T_Badende_per_Time,
SUM(IF(measurements.title = 'measure_2', CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)), 0)) as measure_2,
SUM(IF(measurements.title = 'measure_3', CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)), 0)) as measure_3
etc...
FROM
routines
INNER JOIN measure_routine ON routines.id = measure_routine.routine_id
INNER JOIN measurements ON measure_routine.measure_id = measurements.id
WHERE
<conditions>
GROUP BY routines.date, routines.time
ORDER BY routines.date, routines.time
如果希望每个度量类型有一行,则需要通过度量值来透视数据。title
。MySQL不支持PIVOT
语句,因此您必须像这样伪造它:
SELECT
routines.data,
routines.time,
SUM(IF(measurements.title = 'T_Badende_per_Time', , 0)) CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)) as T_Badende_per_Time,
SUM(IF(measurements.title = 'measure_2', CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)), 0)) as measure_2,
SUM(IF(measurements.title = 'measure_3', CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)), 0)) as measure_3
etc...
FROM
routines
INNER JOIN measure_routine ON routines.id = measure_routine.routine_id
INNER JOIN measurements ON measure_routine.measure_id = measurements.id
WHERE
<conditions>
GROUP BY routines.date, routines.time
ORDER BY routines.date, routines.time
如果希望每个度量类型有一行,则需要通过度量值来透视数据。title
。MySQL不支持PIVOT
语句,因此您必须像这样伪造它:
SELECT
routines.data,
routines.time,
SUM(IF(measurements.title = 'T_Badende_per_Time', , 0)) CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)) as T_Badende_per_Time,
SUM(IF(measurements.title = 'measure_2', CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)), 0)) as measure_2,
SUM(IF(measurements.title = 'measure_3', CAST(REPLACE(measurements.value, ',', '.') AS DECIMAL(18, 2)), 0)) as measure_3
etc...
FROM
routines
INNER JOIN measure_routine ON routines.id = measure_routine.routine_id
INNER JOIN measurements ON measure_routine.measure_id = measurements.id
WHERE
<conditions>
GROUP BY routines.date, routines.time
ORDER BY routines.date, routines.time
谢谢,sql查询非常有效。但这里有一个问题:SQLsquery删除十进制值并使其成为整数。另一个问题是,谷歌图表是否支持十进制,或者我是否必须用字符串替换它为点,如果是的话,将如何实现。谢谢你的帮助,真的很感激。这是奇怪的行为。我想知道SUM
是否因为0
而将数据字段转换为整数。尝试将0转换为与数据列相同的数据类型,例如:CAST(0转换为十进制(18,2))
。谢谢,我尝试了这个方法,效果非常好。您能告诉我如何在您向我展示的sql查询中实现它吗?我真的很感谢你所有的时间和精力。你需要在每一个总和中投射度量值。我将用示例编辑答案。谢谢!我有另一个问题。请看一看:谢谢,sql查询非常有效。但这里有一个问题:SQLsquery删除十进制值并使其成为整数。另一个问题是,谷歌图表是否支持十进制,或者我是否必须用字符串替换它为点,如果是的话,将如何实现。谢谢你的帮助,真的很感激。这是奇怪的行为。我想知道SUM
是否因为0
而将数据字段转换为整数。尝试将0转换为与数据列相同的数据类型,例如:CAST(0转换为十进制(18,2))
。谢谢,我尝试了这个方法,效果非常好。您能告诉我如何在您向我展示的sql查询中实现它吗?我真的很感谢你所有的时间和精力。你需要在每一个总和中投射度量值。我将用示例编辑答案。谢谢!我有另一个问题。请看一看:谢谢,sql查询非常有效。但这里有一个问题:SQLsquery删除十进制值并使其成为整数。另一个问题是,谷歌图表是否支持十进制,或者我是否必须用字符串替换它为点,如果是的话,将如何实现。谢谢你的帮助,真的很感激。这是奇怪的行为。我想知道SUM
是否因为0
而将数据字段转换为整数。尝试将0转换为与数据列相同的数据类型,例如:CAST(0转换为十进制(18,2))
。谢谢,我尝试了这个方法,效果非常好。您能告诉我如何在您向我展示的sql查询中实现它吗?我真的很感谢你所有的时间和精力。你需要在每一个总和中投射度量值。我将用示例编辑答案。谢谢!我有另一个问题。请看一看:谢谢,sql查询非常有效。但这里有一个问题:SQLsquery删除十进制值并使其成为整数。另一个问题是,谷歌图表是否支持十进制,或者我是否必须用字符串替换它为点,如果是的话,将如何实现。谢谢你的帮助,真的很感激。这是奇怪的行为。我想知道SUM
是否因为0
而将数据字段转换为整数。尝试将0转换为与数据列相同的数据类型,例如:CAST(0转换为十进制(18,2))
。谢谢,我尝试了这个方法,效果非常好。您能告诉我如何在您向我展示的sql查询中实现它吗?我真的很感谢你所有的时间和精力。你需要在每一个总和中投射度量值。我将用示例编辑答案。谢谢!我有另一个问题。如果你能看一下: