Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MySQL数组中Google图表中的多行_Javascript_Php_Mysql - Fatal编程技术网

Javascript MySQL数组中Google图表中的多行

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

我试图将我的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对结果进行回应:

<?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();