-1

ループ計算の配列値$result[]を表示したい。forただし、ページには何も表示されません。以下のコードに何か問題がありますか?

$sql= "SELECT * FROM items where itemID =3 ";
$result1= mysql_query($sql) or die (mysql_error());
while ($row= mysql_fetch_array($result1)){

    $quantity[] = $row ['quantity'];

    $month[] = $row ['month'];
}

$alpha = 0.3;

for($i = 1; $i > 12; $i++){

    $result[$i] = ($quantity[$i] - $result[$i-1]) * $alpha + $result[$i-1];

}

foreach ($result as $key => $value ){

 echo "$value";

}
4

3 に答える 3

1

これはあなたの質問に対する直接的な回答ではありませんが、データのクエリと処理の方法に関して言及されていないことがいくつかあります。

  1. あなたのSELECTステートメントには特定の順序が指定されていません。レコードの順序が保持されないため、正しい順序でレコードが取得されず、無効な計算が行われる可能性があります。ORDER BY(例)または月の値を使用ORDER BY monthして、配列から前月の値を正確に抽出します(コードで行っている場合)。

  2. 現在のコードは、DB からの結果セットに (少なくとも) 12 レコードが含まれるという事実に依存しています。何らかの理由で生成されるレコードが少なくなると、forループが停止します。

  3. 質問の情報からは不明ですが、テーブルに 1 年分のレコードしか含まれていない限り、クエリに年が必要なようです。

これで、このようなクエリを使用して DB 側で全体を計算できます

SELECT i.month, 
       COALESCE((i.quantity - p.quantity) * 0.3 + p.quantity, 0) value
  FROM items i LEFT JOIN items p
    ON i.itemID = p.itemID
   AND i.`year` = p.`year`
   AND i.month = p.month + 1
 WHERE i.itemID = 3
   AND i.`year` = 2013
 ORDER BY month

SQLフィドル

これは、計算のために前月の数量値を実際に読み取る必要があり、month列が整数型であると仮定しています (そして、それについてはわかりません)。

于 2013-05-26T05:24:11.540 に答える