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