【问题标题】:How to display data from different tables when they have the same hour (datetime) using Google Charts and MySQL?如何使用 Google Charts 和 MySQL 在具有相同小时(日期时间)的不同表中显示数据?
【发布时间】:2019-06-04 15:56:56
【问题描述】:

我正在尝试显示来自不同表的多维数据,当小时有匹配时。例如,table1 中的 value1 和 table2 中的 value2 应该显示在 Y 中,小时显示在 X 中。我使用的是 Google Charts 和 MySQL。当我从单个表中选择内容时,该代码有效,但是当我尝试混合结果时,它会出现此错误:“轴 #0 的数据列不能属于字符串类型”

我尝试使用 WHERE 并尝试 JOIN 将 table1 中的 Datetime 列与 table2 链接,但没有成功。我知道我可能仍然需要格式化 Datetime 才能仅获取小时,但我感觉完全卡住了。

这是我在表 1 中的内容:

在表 2 中:

我想要这样的东西:

下面是代码:

 var data = google.visualization.arrayToDataTable([

 ['Datetime','Value1', 'Value2'],
 <?php 

 $query =   "SELECT table1.Datetime, table1.Value1, table2.Value2 ".
            "FROM table1 ".
            "WHERE table1.Datetime = table2.Datetime ".
            "ORDER BY table1.Datetime ASC ".
            "LIMIT 24";

             $exec = mysqli_query($con,$query);
             while($row = mysqli_fetch_array($exec)){

             echo "[
             '".$row['Datetime']."',
             ".$row['Value1']." ,
             ".$row['Value2']."
             ],";
             }
             ?>     

 ]);

注意:我将图表限制为 24 行,因为当插入新数据时(每小时),仅显示最近 24 小时的数据。

【问题讨论】:

  • 鉴于上面的 sql,您需要在 FROM 语句中包含 table2 --> FROM table1, table2
  • 我也试过这个,但似乎行开始重复。图表显示超过 4 行。 ://
  • 当行重复时,这通常意味着每个表中有不止一行符合WHERE 语句中的条件——例如,在您提供的示例表中,有每个表中有 3 行,日期为 2019-06-04 00:00:00,因为 WHERE 只声明 table1.Datetime = table2.Datetime,这将导致重复行 -- 你想对这些行的值求和吗?
  • 我明白了.. 我不想“求和”这些值,我需要在图表中拥有的是:2019-06-04 00:00:00 - 50 和 80(来自ID1,值 1/table1 和值 2/table2) 2019-06-04 00:00:00 - 30 和 20(来自 ID2) 2019-06-04 00:00:00 - 66 和 34(来自 ID3) 2019- 06-04 15:01:10 - 44 和 33(来自 ID4)
  • 更改WHERE 语句 --> WHERE table1.Datetime = table2.Datetime and table1.ID = table2.ID

标签: php mysql database charts google-visualization


【解决方案1】:

我正在回答我自己的问题,但这要感谢 WhiteHat 在 cmets 中提供的反馈。

第一个问题:我没有在 FROM 子句中包含第二个表。

第二个问题:我的数据示例不好,因为我有重复的 Datetime 值。

第三个问题:通过在代码中添加 HOUR 函数解决了表格之间的小时匹配问题。见下文:

var data = google.visualization.arrayToDataTable([

 ['Hour1','Value1', 'Value2'],
 <?php 

 $query =   "SELECT HOUR(table1.Datetime) AS Hour1, table1.Value1, table2.Value2 ".
            "FROM table1, table2 ".
            "WHERE HOUR(table1.Datetime) = HOUR(table2.Datetime) ".
            "ORDER BY table1.Datetime ASC ".
            "LIMIT 24";

             $exec = mysqli_query($con,$query);
             while($row = mysqli_fetch_array($exec)){

             echo "[
             '".$row['Hour1']."',
             ".$row['Value1']." ,
             ".$row['Value2']."
             ],";
             }
             ?>


 ]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多