Javascript MySQL数组中Google图表中的多行
我试图将我的MySQL查询传递到Google折线图中,但在将其转换为正确的格式时遇到了一些问题。 该图表显示了计算机上RAM利用率的百分比 MySQL查询:Javascript MySQL数组中Google图表中的多行,javascript,php,mysql,Javascript,Php,Mysql,我试图将我的MySQL查询传递到Google折线图中,但在将其转换为正确的格式时遇到了一些问题。 该图表显示了计算机上RAM利用率的百分比 MySQL查询: SELECT DATE_FORMAT(date, 'new Date(%Y, %c, %d, %H, %i, %s)') AS date, percentComittedInUse, machineName FROM stsdata.hyperv_perf_memory 表格结果(缩短): 我正在使用PHP对结果进行回应: <?ph
SELECT DATE_FORMAT(date, 'new Date(%Y, %c, %d, %H, %i, %s)') AS date, percentComittedInUse, machineName FROM stsdata.hyperv_perf_memory
表格结果(缩短):
我正在使用PHP对结果进行回应:
<?php
$row = mysqli_fetch_assoc($VMMemoryPerf);
if ($VMMemoryPerf->num_rows > 0) {
while ($row = mysqli_fetch_assoc($VMMemoryPerf)) {
echo "[".$row['date'].", '".$row['machineName']."', '".$row['percentComittedInUse']."'],";
}
}
?>
根据您在更新中添加的预期输出,我认为您基本上是在寻找透视表
SELECT
DATE_FORMAT(date, 'new Date(%Y, %c, %d, %H, %i, %s)') AS date,
SUM(IF(machineName = 'STSWKS15', percentComittedInUse, 0)) AS 'STSWKS15',
SUM(IF(machineName = 'FAKE_VHOST8', percentComittedInUse, 0)) AS 'FAKE_VHOST8'
FROM stsdata.hyperv_perf_memory
GROUP BY `date`;
这将返回如下内容:
date |STSWKS15 |FAKE_VHOST8 |
----------------------------------|---------|------------|
new Date(2018, 8, 21, 10, 53, 27) |15 |0 |
new Date(2018, 8, 21, 10, 53, 44) |25 |0 |
new Date(2018, 8, 21, 10, 53, 57) |57 |0 |
new Date(2018, 8, 21, 10, 54, 13) |60 |0 |
new Date(2018, 8, 21, 10, 54, 27) |0 |35 |
new Date(2018, 8, 21, 10, 54, 35) |0 |45 |
这假设您事先知道您的机器名称。如果没有,您可能需要在这方面做更多的工作
=======================================
编辑:对评论的回答
如果希望动态获取列名,可以使用如下动态查询。创建存储过程并调用以获取数据
CREATE DEFINER=`root`@`localhost` PROCEDURE `getUsage`()
BEGIN
SET @query = NULL;
SELECT
GROUP_CONCAT(
DISTINCT CONCAT('SUM(IF (machineName = "', machineName, '", percentComittedInUse, 0)) AS ', CONCAT(clientName, '_', machineName))
) INTO @query
FROM stsdata.hyperv_perf_memory;
SET @query = CONCAT('SELECT `date`, ', @query, ' FROM stsdata.hyperv_perf_memory GROUP BY date, clientName');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
要从中获取数据,只需执行如下查询:
call getUsage();
希望能有帮助!!如果您有任何疑问,请随时询问。这确实有助于按照我所希望的方式构造表,但如果向数据库中添加更多的机器名,则无法使其随时可用。您知道有一种方法可以为每个唯一的机器名运行此透视表吗?感谢you@kfear请查看对我答案的编辑。我添加了一个动态查询。我尝试创建过程,并在
SET@query=NULL代码>出现错误:语法错误:缺少“分号”。同样对于这个查询,我是否需要更改第一行,即。root@localhost对我Username@MySQLServer以及Mydb
到我的数据库的名称?我还没有使用存储过程,所以这对我来说是新的。非常感谢您的帮助@Nimeshka@kfear是的,它们需要相应地更改。您可以将其设置为DEFINER=@%允许它从任何主机上运行,也可以完全删除DEFINER部分。这不是强制性的。只是安全限制。有关更多详细信息,请参阅文档。你能详细说明一下那个丢失的分号错误吗?你是如何创建程序的?我设法让它工作,并创建了程序。非常感谢。我现在要把这些列放到我的图表中。我需要解决的另一个难题是通过PHP动态添加列
call getUsage();