如何在PHP中处理来自一个mySQL数据库表的两大数据集


How to work with two large sets of data from one mySQL database table in PHP?

我试图在PHP脚本中使用来自同一mySQL表的两组数据。其理念是每小时从API中抓取数据并放入数据库。然后,第二个脚本从数据库中提取信息并显示滚动的6小时增量。

我遇到了一点问题,试图从两个数据集创建delta。我需要运行两个mySQL查询来获得我需要的数据(当前和从6小时前),但不能真正想到一种方法来让脚本工作不包括查询内的循环输出每个条目(这些可以运行到几百次,我不认为有那么多mySQL查询运行会很好吗?)

这是我目前为止写的:

//select the system table and pulls data acquired within the last hour.
$sql = "SELECT system, vp, vpthreshold, owner, time FROM SysData WHERE time > DATE_SUB(NOW(),INTERVAL 1 HOUR)";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
    //Calculates contested percentage
    $vpthreshold = $row["vpthreshold"]; 
    $vp = $row["vp"];   
    $currentcontested = $vp/$vpthreshold*100;
    //Catches potential divide by zeroes, echos system is stable.
    if ($vp == 0.0){
        echo $row["system"] . " " . "is Stable<br>";
    }
    //else output contested percentage with system name in readable format.
    else{
        echo $row["system"] . " " . "{$currentcontested}%" . "<br>";
    }
} 
}

有一个大致相同的语句,提取并响应下面的第二组信息。我怎样才能把这两组组合在一起,这样我就可以使用它们了?这里是PHP的新手和动态学习。

您可以查看嵌套查询。如下所示:

SELECT (data_now.somevalue - data_prev.somevalue) as deltavalue FROM
(
    (your first select statement) as data_now, 
    (your 6 hours ago select statement) as data_prev
);

这允许您一次从其他select语句中选择数据。你应该用你各自的查询替换2个内部"选择语句"。结果将暂时放入data_now和data_prev中。然后,您可以将这些表用作外部选择语句中的普通表。

编辑:为了更具体地说明你想要什么,这里是一个更新的例子:

SELECT (data_now.vp/data_now.vpthreshold - data_prev.vp/data_prev.vpthreshold) as deltavalue FROM
(
    (SELECT system, vp, vpthreshold, owner, time FROM SysData WHERE time > DATE_SUB(NOW(),INTERVAL 1 HOUR)) as data_now, 
    (your 6 hours ago select statement) as data_prev
);
在您的PHP代码中,请记住将结果引用为:
$row["deltavalue"]

或者你在外部SELECT中"as"后面加上的任何东西