0

我需要帮助才能将嵌套查询的结果分配到数组中。这是场景:

$Date_Collection = mysql_query("SELECT DISTINCT Date FROM TblDate");

while($date = mysql_fetch_array($Date_Collection)) // Loop through all the dates
{
    $var_date = $date['Date'];
    $result = mysql_query("select min(Speed) as Min_spd, max (Speed) as Max_spd, avg   
                  (Speed) as Avg_spd from ... where Date= $var_date");

  while($row = mysql_fetch_array($result))
   {
     echo "row[Min_spd]";
     echo "row[Max_spd]";
     echo "row[Avg_spd]";
    }
 }

此查询的输出如下所示:

Min_Spd |Max_Spd |Avg_Spd|       Date|
    12.0|    25.0|   20.4| 2012-10-01|
    11.0|    28.0|   21.4| 2012-10-02|
    10.0|    26.0|   23.4| 2012-10-05|
    08.0|    22.0|   21.4| 2012-10-08|

我基本上需要显示所有这些日期的 Min_Spd 总和、Max_spd 总和、Avg_spd 总和。所以,我认为如果我可以将这些值分配到一个数组中,然后从数组中计算这些总和,这可能是一个好主意。

有人可以帮我解决这个问题吗?我可以使用数组来存储值,然后访问这些值并计算这些值的总和。如果我可以使用数组,谁能告诉我在 PHP 中使用数组的语法。我非常感谢您对此的任何帮助。

除了使用数组之外,还有什么替代方法,比如创建一个临时表来保存这些值,然后再删除临时表。如果可以使用临时表,请告诉我如何做到这一点。我可以将 temptable 用于单个循环,但是有一个嵌套循环,我不完全知道如何在嵌套循环内创建一个临时表来存储所有值。

4

4 回答 4

0

I would first of all save yourself a nested query by doing the first query as:

$result = mysql_query("select Date, min(Speed) as Min_spd, max (Speed) as Max_spd, avg(Speed) as Avg_spd from ... group by Date")

And then create a running total for the sums as you're looping through each row:

$sumMinSpeeds=0;
$sumMaxSpeeds=0;
$sumAvgSpeeds=0;
while($row = mysql_fetch_array($result))
{
    echo row['Min_spd'];
    echo row['Max_spd'];
    echo row['Avg_spd'];

    $sumMinSpeeds += $row['Min_spd'];
    $sumMinSpeeds += $row['Max_spd'];
    $sumMinSpeeds += $row['Avg_spd'];

}
echo $sumMinSpeeds;
echo $sumMaxSpeeds;
echo $sumAvgSpeeds;
于 2012-07-09T21:18:58.287 回答
0

我不知道MySQL SUM函数是否可以用于te 查询,尝试一下。但是在这个例子中,使用数组你应该存储值,然后使用array_sum返回元素的总和。像这样的东西:

$min_spd = array();
$max_spd = array();
$avg_spd = array();
while($row = mysql_fetch_assoc($result))
{
    $min_spd[] = $row['Min_spd'];
    $max_spd[] = $row['Max_spd'];
    $avg_spd[] = $row['Avg_spd'];
}

echo array_sum($min_spd);

也可以使用变量来存储和添加值:

$min_spd = 0;
$max_spd = 0;
$avg_spd = 0;

while($row = mysql_fetch_assoc($result))
{
    $min_spd += $row['Min_spd'];
    $max_spd += $row['Max_spd'];
    $avg_spd += $row['Avg_spd'];
}

echo $min_spd;
于 2012-07-09T21:11:44.040 回答
0
$data = array();
while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

然后以后你可以做

foreach($data as $row) {
   echo $row['Min_spd'];
   echo ...
   ...
}
于 2012-07-09T21:07:51.763 回答
0

与其在一个循环中执行多个 MySQL 查询,不如考虑构建这样一个查询,它将返回您需要的所有结果。

SQL

首先,使用GROUPSQL 结构是有意义的。

SELECT
    s.Date       date,
    MIN(s.Speed) min,
    MAX(s.Speed) max,
    AVG(s.Speed) avg
FROM speed_table s
WHERE s.Date IN (SELECT DISTINCT d.Date FROM date_table d)
GROUP BY s.Date

了解此查询的每个部分的作用很重要。如果遇到任何问题,请查阅MySQL 参考手册

PHP

忘记使用mysql_*函数:它们已被弃用,并且出现了更好的实现:PDOmysqli. 我的示例使用PDO.

try {
    $dbh = new \PDO('mysql:dbname=my_db_name;host=127.0.0.1', 'dbuser', 'dbpass');
} catch (\PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$sql  = '...';  // This is the query
$stmt = $pdo->prepare($sql);
$stmt->execute();

您现在可以遍历返回的结果集

while ($row = $stmt->fetch()) {
    printf("%s; %s; %s; %s\n", $row['date'], $row['min'], $row['max'], $row['avg']);
}

或者让Statement对象通过使用返回整个数组

$result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
于 2012-07-09T21:29:20.570 回答