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);
?>

食材テーブルには、各食材のデフォルト値とサービングサイズが保存されています。

レシピテーブルは、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 の 1 つの結果行からその 1 つの列だけを取得します。

$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 に答える