我想从$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";
}
答案 0 :(得分:7)
你的for循环有错误。
for($i = 1; $i > 12; $i++)
但它应该是
for($i = 1; $i < 12; $i++)
答案 1 :(得分:1)
这不是您问题的直接答案,但很少有与您查询和处理数据的方式有关的事情:
您的SELECT
语句未指定特定顺序。由于未保留记录顺序,您可以获得正确顺序的记录并获得无效计算。使用ORDER BY
(例如ORDER BY month
)或使用月份值并从数组中精确提取上个月的值(如果它是您在代码中执行的操作)。
您当前的代码依赖于DB的结果集将包含(至少)12条记录的事实。如果由于某种原因它会产生较少的记录,你的for
循环将会制动。
根据问题中的信息不确定,但看起来您的查询可能需要一年,除非该表仅包含一年的记录。
现在,您可以使用类似
的查询计算数据库端的整个内容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
列是整数类型
答案 2 :(得分:0)
逻辑上有一个明显的缺陷。你试图获得$ i索引形式$ quantity。但是,您无法确定$ 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;
}