Forum Webscript.Ru
Программирование => PHP => Тема начата: temur от 13 Июля 2002, 16:02:08
-
Вот часть скрипта:
$query_cr_buy = "select quantity from cap_buy where cap = \'$cap\'";
$query_cr_sell = "select quantity from cap_sell where cap = \'$cap\'";
$to_sell_result = mysql_query($query_cr_sell, $link);
$to_buy_result = mysql_query($query_cr_buy, $link);
$to_buy_array = mysql_fetch_array($to_buy_result);
$to_sell_array = mysql_fetch_array($to_sell_result);
$to_buy = array_sum($to_buy_array);
$to_sell = array_sum($to_sell_array);
Может быть здесь можно и покороче написать, но так получилось :). В конце работы скрипта выводятся $to_buy и $to_sell, которые должны показывать сумму всех элементов возврашенного массива. Но почему-то выдается число, которое в два раза больше первого поля в MySQL :) Почему так происходит?
-
Дело в том, что mysql_fetch_array возвращает две копии массива: ассоциативный и обычный, нумированный. Тебе нужно
$array = mysql_fetch_row($to_buy_result);
-
А можешь методом Емели: дели все на два :-)
-
Сумма в два раза больше не всей суммы, а только одного из полей MySQL :) Как с этим бороться?
-
Я вообще плохо представляю себе, как именно ты считаешь сумму. По приведенному тобой примеру, у тебя сумма есть просто значение одного поля, умноженного на два (в силу причин, о которых я писал выше), так как mysql_fetch_array возвращает массив из данных только одной записи, а не всех выбранных в целом. Значит тебе в любом случае нужно использовать цикл.
Другое дело, что ты можешь сделать все это в запросе MySQL
$query = "SELECT SUM(b.quantity), SUM(s.quantity) from cap_buy b, cap_sell s where b.cap = \'$cap\' OR s.cap = \'$cap\'";
-
А можно и так.
$query_cr_buy = "select quantity from cap_buy where cap = \'$cap\'";
$query_cr_sell = "select quantity from cap_sell where cap = \'$cap\'";
$to_sell_result = mysql_query($query_cr_sell, $link);
$to_buy_result = mysql_query($query_cr_buy, $link);
$to_buy_array = mysql_fetch_array($to_buy_result);
$to_sell_array = mysql_fetch_array($to_sell_result);
$to_buy = $to_buy_array[\'quantity\'];
$to_sell = $to_sell_array[\'quantity\'];
В любом случае, непонятно, зачем тебе суммировать массив из одного элемента.-
-
Может я чего не понимаю, простите, глупый я :)
Задам вопрос по другому. Я с помощью select получаю доступ к полям базы, где хранятся цифры разные. Как мне получить сумму этих чисел?
-
SELECT SUM(imja_polja) FROM tablica
-
Как тебе написал ГотЗфрид.
$query_cr_buy = "select SUM(quantity) as sum_q from cap_buy where cap = \'$cap\'";
$to_buy_result = mysql_query($query_cr_buy, $link);
$to_buy_array = mysql_fetch_array($to_buy_result);
$to_buy = $to_buy_array[\'sum_q\'];
а то, что ты не понимаешь - это что mysql_fetch_array возвращает тебе только одну запись. значение quantity только из одной стоки базы.
то есть, если делать, как ты хотел, то надо не один раз вызывать mysql_fetch_array, а в цикле порулчать quantity и суммировать.
-
Все, всем спасибо!