-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

7

您的 for 循环有错误。你有

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

但应该是

for($i = 1; $i < 12; $i++)
于 2013-05-26T04:27:45.950 回答
1

这不是您问题的直接答案,但有几件事情没有提到与您查询和处理数据的方式有关:

  1. 您的SELECT声明没有指定特定的顺序。由于不保留记录的顺序,您可能会得到不正确的记录并得到无效的计算。使用ORDER BY(例如ORDER BY month)或使用月份值并从数组中准确提取上个月的值(如果这是您在代码中所做的)。

  2. 您当前的代码依赖于 DB 的结果集将包含(至少)12 条记录这一事实。如果由于某种原因它会产生更少的记录,你的for循环就会停止。

  3. 问题中的信息不确定,但看起来您可能需要一年的查询,除非该表仅包含一年的记录。

现在,您可以使用这样的查询在 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

SQLFiddle

这是假设(我不确定)您实际上需要读取上个月的数量值以进行计算,并且month列是整数类型

于 2013-05-26T05:24:11.540 回答
0

逻辑上有一个明显的缺陷。您尝试从 $quantity 获取 $i 索引。但是,您不能确定 $quantity 会有这个索引。假设 itemId 不是主键,我会这样做:

$sql = "SELECT * FROM `items` WHERE `itemID` = 3";
$result1= mysql_query($sql) or die (mysql_error());
while ($row= mysql_fetch_assoc($result1)){    
    $quantity[] = $row ['quantity'];
}

$alpha = 0.3;

$i = 1
foreach ($quantity as $elem) {
    if ($i >= 12)
      break;
    $result[$i] = ($elem - $result[$i-1]) * $alpha + $result[$i-1]; 
    $i++
}

foreach ($result as $value ){
 echo $value;
}
于 2013-05-26T04:34:35.007 回答