подсчет и умножение

vmnetwork

Новичок
Появился вопрос подсчитать сумму товаров в корзине, но количество заказанной вещи и цена находятся в разных таблицах... Вообщем пока реализовал вот так вот:

$query46 = "select * from $corsina where cor_status = $st and memberid = $low";
$result46 = mysql_query($query46);
$num_results46 = mysql_num_rows($result46);
while ($qry46 = mysql_fetch_array($result46))
{
$usaf = $qry46['id'];
$query47 = "select * from $news where id = $usaf";
$result47 = mysql_query($query47);
$num_results47 = mysql_num_rows($result47);
while ($qry47 = mysql_fetch_array($result47)) {
// количество
$a = $qry46['cor_col'];

//стоимость
$b = $qry47['price'];

$i = $a * $b;
print $i;
}
}

Естественно хочется узнать как правильно подсчитать? тоесть сейчас это конечно неправильно (сам подсчет), к примеру если несколько записей в корзине уже ничего не считает (ну оно и понятно). Какие функции использовать? Заранее спасибо.
 

DIG

Новичок
Партнер клуба
Сначал просто, без php, напиши sql запрос который вытащит нужные данные. Чтобы конкретнее подсказать - нужно видеть структуру таблиц, но лучше сам разберись - задача не сложная.
 

vmnetwork

Новичок
Данные уже вытащил... это $qry46['cor_col']; - количество и $qry47['price']; стоимость.... естественно их нужно перемножить для получения общей стоимости.... но проблема в том что если у меня несколько товаров то нужно чтобы по каждой извлеченной позиции кол во перемножалось с ценой и потом все это складывалось...
 

dimagolov

Новичок
ну так создай переменную $total, инициализируй ее 0 и каждый раз делай инкремент $total+= $sum;
и замени свое дурацкое
PHP:
$a = $qry46['cor_col'];

//стоимость
$b = $qry47['price'];

$i = $a * $b;
на
PHP:
$number = $qry46['cor_col'];

$price = $qry47['price'];

$sum = $price * $number;
переменные должны именоваться осмысленно и пояснять что в них храниться
 

DIG

Новичок
Партнер клуба
Ну я незнаю как там у Вас организована корзина и таблица товара.
Я попробую обьяснить на примере.
Только не используйте его как есть, т.к. это сильно утрировано и неоптимально.
mysql> select * from items;
+------+-------+-------------+
| id | price | description |
+------+-------+-------------+
| 1 | 100 | blablabla |
| 5 | 99 | bla |
+------+-------+-------------+
2 rows in set (0.00 sec)

mysql> select * from cart;
+------+---------+-------+
| id | item_id | count |
+------+---------+-------+
| 1 | 1 | 1 |
| 1 | 5 | 3 |
+------+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from cart left join items on cart.item_id = items.id;
+------+---------+-------+------+-------+-------------+
| id | item_id | count | id | price | description |
+------+---------+-------+------+-------+-------------+
| 1 | 1 | 1 | 1 | 100 | blablabla |
| 1 | 5 | 3 | 5 | 99 | bla |
+------+---------+-------+------+-------+-------------+

Так вот, к чему это я, к тому, что теперь в одной строке, одного запроса мы имеем и цену и количество товара...
И теперь в php скрипте можно довольно просто это все перемножать\делить\складывать.
Незнаю, понятно ли я изложил свою мысль, но я еще раз повторю - нужно смотреть вашу модель данных, структуру таблиц.
 

vmnetwork

Новичок
dimagolov - вот тут именно и проблема... как потом сложить сумму полученных $total+ , вот это именно я и не понимаю... их же может и 2 и 10 и более быть...
 

vmnetwork

Новичок
понял что нужно создать на подобии
$total = array($i.... ); - только как вот тут вот быть
echo "sum(total) = ".array_sum($total)."\n";
 

vmnetwork

Новичок
вообщем как пошел.. присваиваю $is = 0;

далее извлечение из БД то что нужно...
// Извлечение количества (с этим проблем нет)
$query46 = "select * from $corsina where cor_status = $st and memberid = $low";
$result46 = mysql_query($query46);
$num_results46 = mysql_num_rows($result46);
while ($qry46 = mysql_fetch_array($result46))
{
$usaf = $qry46['id'];
// извлечение цены из другой таблицы (тоже проблем нет)
$query47 = "select * from $news where id = $usaf";
$result47 = mysql_query($query47);
$num_results47 = mysql_num_rows($result47);
while ($qry47 = mysql_fetch_array($result47)) {
// получение кол-ва
$a = $qry46['cor_col'];
// получение цен
$b = $qry47['price'];
$is++;
$i[$is] = $a * $b;
$total = array($i[$is]);
}
}
echo array_sum($total);
А вот как создать массив не пойму :(
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Короче, джойнишь, таблицу "корзина" к таблице "ньюз", получаешь нужный результат.

В твоем запросе тебе нужно
JOIN
COUNT
AS

Вуаля.

Общую сумму считаешь, как считал
 

vmnetwork

Новичок
а как тогда это все складывать? тоесть после MYSQL получается множество значений $i (где $i = $a * $b; - перемножение кол-ва на цену).... тоесть грубо говоря будет у клиента в корзине 10 предметов... как заставить все полученные 10 значений $i сложиться? в этом у меня проблема

DIG - да полностью практически идентичные таблицы MySQL
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Так-же, как в арифметике.
Колличество * стоимость.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Как-то так.
select *, table1.count * table2.price AS t from table1, table2 where table1.tovar_id = table2.id AND table2.user_id = '........'

Мей-би для количества тебе может понадобиться групировака и COUNT()
 

vmnetwork

Новичок
ну вообщем решил проблему :( к сожалению так и не понял как тут предлагалось... открыл старую добрую книгу по PHP там предлагалось решить все это так:

т.е. начало я оставляю свое... а конец делаю по другому:

while ($qry47 = mysql_fetch_array($result47)) {
$a = $qry46['cor_col'];
$b = $qry47['price'];
$price +=$a * $b;
}
}
print $price;

// ну это концовка :) вродебы пока правильно считает... Спасибо всем за помощь :) Конечно по хорошему нужно сделать действительно один запрос к БД...
 
Сверху