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

MySQLSUM関数を使用してクエリでそれを実行できるかどうかわかりません。試してみてください。ただし、この例では、配列を使用して値を格納してから、 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

ループ内で複数の 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_*: それらは非推奨であり、より優れた実装が出現しています: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);
于 2012-07-09T21:29:20.570 に答える
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

まず、最初のクエリを次のように実行して、ネストされたクエリを保存します。

$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;
于 2012-07-09T21:18:58.287 に答える