Forum Webscript.Ru

Программирование => PHP => Тема начата: temur от 13 Июля 2002, 16:02:08

Название: Проблемка с array_sum
Отправлено: 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 :) Почему так происходит?
Название: Проблемка с array_sum
Отправлено: GotZfild от 13 Июля 2002, 16:55:40
Дело в том, что mysql_fetch_array возвращает две копии массива: ассоциативный и обычный, нумированный. Тебе нужно

$array = mysql_fetch_row($to_buy_result);
Название: Проблемка с array_sum
Отправлено: GotZfild от 13 Июля 2002, 16:57:49
А можешь методом Емели: дели все на два :-)
Название: Проблемка с array_sum
Отправлено: temur от 13 Июля 2002, 17:15:18
Сумма в два раза больше не всей суммы, а только одного из полей MySQL :) Как с этим бороться?
Название: Проблемка с array_sum
Отправлено: GotZfild от 13 Июля 2002, 18:13:06
Я вообще плохо представляю себе, как именно ты считаешь сумму. По приведенному тобой примеру, у тебя сумма есть просто значение одного поля, умноженного на два (в силу причин, о которых я писал выше), так как 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\'";
Название: Проблемка с array_sum
Отправлено: Меняздесьдавнонет от 13 Июля 2002, 20:58:39
А можно и так.

$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\'];

В любом случае, непонятно, зачем тебе суммировать массив из одного элемента.-
Название: Проблемка с array_sum
Отправлено: temur от 13 Июля 2002, 21:37:44
Может я чего не понимаю, простите, глупый я :)
Задам вопрос по другому.  Я с помощью select получаю доступ к полям базы, где хранятся цифры разные. Как мне получить сумму этих чисел?
Название: Проблемка с array_sum
Отправлено: Stek от 13 Июля 2002, 21:44:41
SELECT SUM(imja_polja) FROM tablica
Название: Проблемка с array_sum
Отправлено: Меняздесьдавнонет от 13 Июля 2002, 21:49:47
Как тебе написал ГотЗфрид.

$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 и суммировать.
Название: Проблемка с array_sum
Отправлено: temur от 14 Июля 2002, 14:41:10
Все, всем спасибо!