2012-07-09 64 views
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中使用数组的语法。我真的很感谢这方面的帮助。

有没有其他的方法,而不是使用数组,如创建一个临时表来保存这些值,并在以后删除临时表。如果可以使用临时桌子,请告诉我该怎么做。我可以使用单个循环的临时表,但是有一个嵌套循环,我不完全知道如何在嵌套循环内创建临时表以存储所有值。

回答

0
$data = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    $data[] = $row; 
} 

再后来,你可以做

foreach($data as $row) { 
    echo $row['Min_spd']; 
    echo ... 
    ... 
} 
+0

感谢您的建议返回整个阵列。我会按照你的建议去尝试。 – Tariq 2012-07-09 22:09:30

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; 
+0

感谢您的建议。我会按照你的建议去尝试。 – Tariq 2012-07-09 22:07:58

0

我首先的保存自己嵌套查询:

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

然后创建了资金运行总计为你的每一行循环:

$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; 
+0

感谢您的建议。我会按照你的建议去尝试。 – Tariq 2012-07-09 22:08:44

0

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

SQL

首先,这将是有意义的使用GROUP SQL构造。

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 reference manual

PHP

忘记使用mysql_*功能:他们是deprecated和更好的实现已经出现了: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); 
+0

感谢您的建议。我会按照你的建议去尝试。 – Tariq 2012-07-09 22:09:11