公式/查询返回“错误”结果

时间:2012-08-15 23:25:50

标签: php mysql math

我得到了以前的问题/问题的帮助,并且刚刚意识到我给出的脚本返回“错误”的数字/值(但不会触发php / mysql错误)。这是值:

成分#1: 20.216卡路里

成分#2: 134.4564卡路里

脚本应该返回: 154.67 ,而是返回: 91.35

代码:

<?php
//The Recipe selected
$recipe_id = $_POST['recipe_id'];

/*****************************************
 * Total CALORIES in this recipe
 *****************************************/

echo '<h4>Total calories in this recipe:</h4>';

$result = mysql_query(
  "SELECT SUM(ingredient_calories), ingredient_amount
  FROM recipe_ingredients
  INNER JOIN ingredients USING (ingredient_id)
  WHERE recipe_id = $recipe_id");

while ($row = mysql_fetch_array($result)) {
  $recipe_calories = (
    $row['SUM(ingredient_calories)']
    * $row['ingredient_amount']);
}
echo number_format($recipe_calories, 2);

mysql_free_result($result);
?>

成分表,存储每种成分的默认值和份量。

食谱表,存储/设置recipe_id以及与查询无关的其他数据)

recipe_ingredients 表,映射食谱中的成分并存储食谱中使用的量。

我确定这是一个查询问题,但我太过于湿透,无法确定问题。非常感谢任何帮助:)

更新:以下是表格数据,按要求

ingredients
-----------
ingredient_id
ingredient_name
ingredient_calories

recipes
-------
recipe_id
recipe_name

recipe_ingredients
------------------
recipe_id (fk)
ingredient_id (fk)
ingredient_amount

3 个答案:

答案 0 :(得分:1)

你不想要这个:

SELECT SUM(ingredient_calories), ingredient_amount

SUM放在一列而不是另一列上可能是您的错误所在。事实上,当我在mysql(5.0.51a)中尝试此查询时,我只是收到错误。

ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no
GROUP columns is illegal if there is no GROUP BY clause

请改为:

SELECT SUM(ingredient_calories * ingredient_amount)

从php中的单个结果行中抓取那一列:

$row = mysql_fetch_array($result)
$recipe_calories = $row[0]

答案 1 :(得分:1)

这是猜测,因为您实际上没有说明问题所在,但是,$recipe_calories会覆盖结果中的每一行。也许你的意思是:

$recipe_calories = 0;
while ($row = mysql_fetch_array($result)) {
  $recipe_calories += (
    $row['SUM(ingredient_calories)']
    * $row['ingredient_amount']);
}

虽然您应该在SQL中完成所有操作 - 但不需要使用PHP进行计算。

答案 2 :(得分:0)

计算出来!

进行了以下调整:

$result = mysql_query(
  "SELECT ingredient_calories, ingredient_amount
  FROM recipe_ingredients
  INNER JOIN ingredients USING (ingredient_id)
  WHERE recipe_id = $recipe_id");

while ($row = mysql_fetch_array($result)) {
  $recipe_calories += (
    $row['ingredient_calories']
    * $row['ingredient_amount']);
}
echo number_format($recipe_calories, 2);

问题解决了:))