我需要帮助才能将嵌套查询的结果分配到数组中。这是场景:
$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用于单个循环,但是有一个嵌套循环,我不知道如何在嵌套循环中创建临时表来存储所有值。
答案 0 :(得分:0)
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
然后你可以做
foreach($data as $row) {
echo $row['Min_spd'];
echo ...
...
}
答案 1 :(得分: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;
答案 2 :(得分: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;
答案 3 :(得分: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,并且出现了更好的实现:PDO
和mysqli
。我的示例使用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);