0

我为以前的问题/问题获得了帮助,并且刚刚意识到给我的脚本返回了“错误”的数字/值(但不会触发 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);
?>

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

recipes表,存储/设置 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
4

3 回答 3

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]
于 2012-08-15T23:33:12.800 回答
1

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

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

虽然你应该只用 SQL 来做这一切——没有必要用 PHP 来计算。

于 2012-08-15T23:34:16.517 回答
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);

问题解决了 :)

于 2012-08-16T00:52:00.557 回答