|
|
|
| Есть формула подсчета калорий из таблицы:
<?...do
{
$sum_cal1 = (int)$ings['ings_value'] * $ccal['ccal'];
}
while ( $ings = mysql_fetch_array($ings1) );
...
?>
|
$ings['ings_value'] = 300 г. и 200 г.
$ccal['ccal'] = 210 и 55.
Если умножать по отдельности (300 * 210 и 200 * 55), то результат будет (63000 и 11000)
Как мне сложить эти 2 значения? | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 10:42)
| | $sum_call += ...
правда перед циклом надо объявить эту переменную
$sum_call = 0
и почему опять do...while? | |
|
|
|
|
|
|
|
для: neadekvat
(03.08.2010 в 11:30)
| | О, блин, спасибо. Помогло.
Потому что, при while {} у меня цикл вообще не работает. Правда стоит mysql_fetch_array... | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 11:57)
| | Так может, стоит разобраться, почему не работает, чем использовать неправильный метод? | |
|
|
|
|
|
|
|
для: neadekvat
(03.08.2010 в 12:06)
| | Читал про mysql_fetch_array и mysql_fetch_assoc - не понял, в чем у них различия.
Поэтому идти дальше и разбираться - некуда. | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 12:13)
| | Честно, я не понимаю, как и чем вы читаете. Уже не первый раз не понимаю.
mysql_fetch_array возвращает ассоциативный и обычный массив
mysql_fetch_assoc - только ассоциативный.
И уж совершенно непонятно, как это связано с тем, что у вас не работает while. | |
|
|
|
|
|
|
|
для: neadekvat
(03.08.2010 в 12:18)
| | Так ведь он работает на основе каких-то данных. Т.е. возвращенных данных из базы (mysq_fetch_). Вот я и сделал такой вывод.
Вот такая конструкция:
<?$ings1 = mysql_query("SELECT * FROM rec_ings WHERE rec_id = '$data[id]'",$db);
$ings = mysql_fetch_array($ings1);
$sum_cal = 0;
while ( $ings = mysql_fetch_array($ings1) );
{
$ccal1 = mysql_query("SELECT * FROM ings WHERE id = '$ings[ings_id]'",$db);
$ccal = mysql_fetch_array($ccal1);
$sum_cal += (int)$ings['ings_value'] * $ccal['ccal'];
}
echo round($sum_cal / 100)." ккал";?>
|
Выводит "0". В чем тут ошибка может быть? Все ж идеально. | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 12:27)
| | while ( $ings = mysql_fetch_array($ings1) );
нахэ здесь ; после скобок ???
вторую строку уберите вообще | |
|
|
|
|
|
|
|
для: psychomc
(03.08.2010 в 12:42)
| | Какую скобку? После while или 2-ю "}"? Их же нельзя убирать. | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 12:50)
| | ; явно лишняя | |
|
|
|
|
|
|
|
для: Slo_Nik
(03.08.2010 в 13:38)
| | Это все, что вы смогли увидеть в том куске? | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 12:27)
| | В том, что mysql_fetch_array и - mysql_fetch_array это взаимоисключающие функции, выполняющие одно и то же действие, только возвращающие разное количество массивов.
и вот это
mysql_fetch_assoc надо использовать вместо mysql_fetch_array
И вообще второй запрос можно вполне впихнуть в первый запрос.
Работоспособность всего этого проверить не могу, т.к. нет дампа бд и входных данных.
<?php
$query = mysql_query("SELECT (rec_ings.ings_value + ings.ccal) as sum
FROM rec_ings WHERE rec_id = '$data[id]'
LEFT JOIN ings ON rec_ings.ings_id = ings.id",$db);
$sum_cal = 0;
while ($arr = mysql_fetch_assoc($query))
$sum_cal += $arr['sum'];
echo round($sum_cal / 100)." ккал";
|
А мб это даже и так сработает:
<?php
$query = mysql_query("SELECT (SUM(rec_ings.ings_value) + SUM(ings.ccal)) as sum
FROM rec_ings WHERE rec_id = '$data[id]'
LEFT JOIN ings ON rec_ings.ings_id = ings.id",$db);
$sum_cal = mysql_result($query, 0);
echo round($sum_cal / 100)." ккал";
|
но фиг знает, ага. | |
|
|
|
|
|
|
|
для: neadekvat
(03.08.2010 в 13:05)
| | Слушай, есть к тебе вопрос на размышление.
Вот по этой формуле, высчитывается калории всех ингредиентов, которые записаны в числовом формате: "Яблоки - 300 г.", "Молоко - 150 г."...
А как высчитывать калории, если значение ингредиентов записаны в таком виде: "Яблоки - 3 шт.", "Молоко - 3/4 стакана".
Твое мнение. | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 14:11)
| | Очевидно, хранится неверно.
Надо хранить калории в 100г продукта, а также в среднем иметь представление о том, сколько грамм весит яблоко или сколько подразумевается под 3/4 стакана. | |
|
|
|
|
|
|
|
для: neadekvat
(03.08.2010 в 14:15)
| | У меня храниться данные, в таблице с ингредиентами, калорий на 100 г. продукта.
Просто я думаю, не совсем красиво будет 5 шт. яиц переводить в граммы, что бы машина подсчитала количество калорий.
Вот и спрашиваю, как бы вы переводили "3,4", "шт." в граммы (в самом скрипте желательно), что бы можно было подсчитать калории. | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 14:20)
| | Можно пойти по другому пути - хранить в базе калории на единицу продукта.
Для муки это граммы, для яиц - штуки. | |
|
|
|
|
|
|
|
для: neadekvat
(03.08.2010 в 14:44)
| | А если это сделать в той же таблице, где и хранятся к-во калорий на 100 г.:
id -- name ---- ccal --- amount
1 -- Яблоки -- 45 ----- 1
2 -- Сливы -- 50 ----- 1
3 -- Молоко -- 100 ---- 1
Примерно так? Если да, то немного не понимаю, как данные из поля amount обрабатывать? | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 15:00)
| | Зачем поле amount? Вы по умолчанию храните только для одной единицы продукта.
В рецептах указывается также единица продукта.
А умножить дело нехитрое.
Взять 300 грамм муки (3 единицы муки), 4 яйца (4 единицы яиц) => общая калорийность = 3 * килокалорий единицы муки + 4 * килоколорий единицы яиц | |
|
|
|
|
|
|
|
для: neadekvat
(03.08.2010 в 15:10)
| | Точно!
И еще. Например, у меня в рецепте пишется такое: "Луковицы - половина головки".
Стоит ли для этого случая делать какую-то проверку, типа preg_match? Или можно пойти каким-то другим путем? | |
|
|
|
|
|
|
|
для: lElectroHardl
(03.08.2010 в 15:15)
| | Храните отдельно информацию об ингридиентах в едином формате, а пользователю выводите более человекопонятно оформлено. | |
|
|
|
|
|
|
|
для: neadekvat
(03.08.2010 в 15:30)
| | Спасибо. | |
|
|
|