2012-07-09 62 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