我想显示for
循环计算的数组值$result[]
。但是,页面上什么也没有显示。下面的代码有什么问题吗?
$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";
}
for循环出错。你有
for($i = 1; $i > 12; $i++)
但应该是
for($i = 1; $i < 12; $i++)
这不是你的问题的直接答案,但是有一些事情没有被提及,涉及你查询和处理数据的方式:
-
您的
SELECT
报表没有指定特定的顺序。由于没有保存记录的顺序,您可能会得到顺序不正确的记录并得到无效的计算。使用ORDER BY
(例如ORDER BY month
)或使用月份值并从数组中提取上个月的值(如果这是你在代码中所做的)。 -
您当前的代码依赖于这样一个事实:来自DB的结果集将包含(至少)12条记录。如果由于某种原因,它将产生更少的记录,您的
for
循环将停止。 -
从问题中的信息来看,这是不确定的,但看起来你可能需要一年的查询,除非表中只包含一年的记录。
现在,您可以使用如下查询在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
列是整数类型
逻辑上有一个明显的缺陷。你试着从$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;
}