Суммирование значения разных строк полей!

nixsoid

Новичок
Суммирование значения разных строк полей!

Есть БД где в таблице 'tab' структура полей такая:

| id | des | qty | typeid | type |
------------------------------------
| 2 | Red Grusha | 3 | 15 | Grushi |
| 3 | White Grusha | 1 | 15 | Grushi |
| 9 | Red Yabloko | 4 | 10 | Yabloki |
| 11 | Green Grusha | 5 | 15 | Grushi |
| 13 | White Yabloko | 6 | 10 | Yabloki |
-------------------------------------------------

Посредством этого скрипта:
PHP:
echo "<table border=\"0\" width=\"100%\">";
echo "<tr bgcolor=\"#CCFFCC\">";
echo "<td width=\"95%\">Description</td>";
echo "<td width=\"5%\">QTY</td>";
echo "</tr>";
$sql = "SELECT * FROM tab where typeid !=0 Group BY typeid";
$result = @mysql_query($sql,$db);
for ($i = 0; $i < @mysql_num_rows($result); $i++) {
     $type = @mysql_result($result, $i, "type");
	 $typeid = @mysql_result($result, $i, "typeid");
echo "<tr align=center><td>+ $type +</td></tr>"; 
$sql3 = "SELECT * FROM tab where typeid='$typeid' and type='$type' order by type";
$result3 = @mysql_query($sql3,$db);
for   ($f = 0; $f < @mysql_num_rows($result3); $f++) {
      $id = @mysql_result($result3, $f, "id");
   	  $des = @mysql_result($result3, $f, "des");
	  $qty = @mysql_result($result3, $f, "qty");
	  $type= @mysql_result($result3, $f, "type");
	  $typeid= @mysql_result($result3, $f, "typeid");
$qty1+=$qty;
echo "<tr>";
echo "<td>$des</td>";
echo "<td>$qty</td>";
echo "</tr>";
}
echo "<tr>";
echo "<td>total</td><td>$qty1</td>";
echo "</tr>";
}
echo "</table>";
выводится в такой формате:

Description | QTY |
-----------------------------------------------
----------------+Grushi+---------------------
Green Grusha 5
Red Grusha 3
White Grusha 1
--
Total: 9
----------------+Yabloki+---------------------
Red Yabloko 4
White Yabloko 6
--
Total: 19
------------------------------------------------

Незнаю как сделать что-бы вычислялось не общее во втором строке количество а только количество яблок то есть не 19 а 10 ?
 

Фанат

oncle terrible
Команда форума
а зачем ты считаешь общее, а не по очереди?
И вообще - зачем здесь два запроса?
 

nixsoid

Новичок
Автор оригинала: Фанат
И вообще - зачем здесь два запроса?
Как выдно выше первый запрос группирует по типам а второй уже выводит их внутри группы.

а зачем ты считаешь общее, а не по очереди ?
Вот в этом то и дело что я незнаю как сделать считат по очереди :(
 

Фанат

oncle terrible
Команда форума
а зачем первый-то группирует?
Вот в этом то и дело что я незнаю как сделать считат по очереди
ЧТО ЗНАЧИТ - НЕ ЗНАЕШЬ?!
если у тебя есть две коробки карандашей, и тебя попросить посчитать сколько карандашей каждого цвета, то ты ТОЖЕ НЕ СПРАВИШЬСЯ???
посчитаешь только, сколько красных, и сколько всего?
 

nixsoid

Новичок
Автор оригинала: Фанат
а зачем первый-то группирует?
Потому-что количество типов Груш, Яблок, Бананов и т.д. динамически изменяется и для красивого вывода надо выводит по типам.
ЧТО ЗНАЧИТ - НЕ ЗНАЕШЬ?!
если у тебя есть две коробки карандашей, и тебя попросить посчитать сколько карандашей каждого цвета, то ты ТОЖЕ НЕ СПРАВИШЬСЯ???
посчитаешь только, сколько красных, и сколько всего?
Дело в том что типы (type) динамически меняются и количество допустим в твоем примере коробок карандашей я заранее не знаю.
 

Фанат

oncle terrible
Команда форума
Потому-что количество типов Груш, Яблок, Бананов и т.д. динамически изменяется и для красивого вывода надо выводит по типам.
выводи, кто тебе не даёт?
а запрос группировкой-то зачем?

Дело в том что типы (type) динамически меняются и количество допустим в твоем примере коробок карандашей я заранее не знаю.
то есть, если ты не будешь знать количество коробок с карандашами, а тебе их выдавать по очереди, то ты не сможешь посчитать количество карандашей в каждой?
я тебя правильно понял?
 

nixsoid

Новичок
Автор оригинала: Фанат
выводи, кто тебе не даёт?
а запрос группировкой-то зачем?
Но по другому я незнаю ещё как можно группировать?
Но у меня проблема в данном случае не с группировкой а с подсчётом!
то есть, если ты не будешь знать количество коробок с карандашами, а тебе их выдавать по очереди, то ты не сможешь посчитать количество карандашей в каждой?
я тебя правильно понял?
Нет я смогу!
Нет там просто я буду запоминат на уме и слагат их а здесь я не хочу заносит в БД сумму а что бы сам пхп скрипт автоматом вычислял!
Но вот в пхп я запутался совсем я делаю так
PHP:
$qty1+=$qty;
по другому я незнаю как можно ещё подсчитат если ты знаеш просто подскажи нормальным образом какая функция или оператор может это делать?
 

RigVan

Постоянный член клуба
А нельзя делать сразу запрос по кол-ву яблок? Или попробуй вложенный цикл сделать...

Мне кажется, что у ты все сильно усложнил... можно вообще добавить отдельный запрос по яблокам и подсчитать их....
 

Фанат

oncle terrible
Команда форума
Но по другому я незнаю ещё как можно группировать?
Но у меня проблема в данном случае не с группировкой а с подсчётом!
тебе, вообще-то, не нужно группировать.
группировка - это когда тебе нуджно получить ПО ОДНОМУ от каждой группы
а тебе надо все.
понимаешь? тебе не нужно знать, " как можно группировать". потому, что тебе вообще не нужно группировать.
Нет я смогу но вот в пхп я запутался
составь алгоритм, по которому ты будешь действовать, когда считаешь карандаши.
напиши его здесь
словами.

так всегда надо делать, когда ты затрудняешься с алгоритмом.
Сначала написать его словами, а потом уже писать код.

какая функция или оператор может это делать?
НЕТУ никакой функции!!!
ПАЛЬЦЕВ достаточно! на руках!
это ПРИМИТИВНАЯ задача! Никому не придёт в голову писать специальную функцию для того, что делается в одно арифметическое действие!
 

nixsoid

Новичок
Я сперва подсчитаю первую коробку карандашей который дали мне запомню на уме (количество по цветам) а потом дадут следущую тоже запомню если есть одинаковые цвета то сложу их вместе на уме и так далее но тут я вед не хочу что-бы пхп каждый подсчёт заносил в базу то есть обращался к базе вед время теряется на этом.

-~{}~ 20.03.06 14:32:

Автор оригинала: RigVan
А нельзя делать сразу запрос по кол-ву яблок? Или попробуй вложенный цикл сделать...

Мне кажется, что у ты все сильно усложнил... можно вообще добавить отдельный запрос по яблокам и подсчитать их....
Но как может пхп скрипт узнать о том что там будет имменно Яблоки в базе по типам а может и яблок вообще не быть потому-что пользователь всё добавляет по необходимости в базу.
 

Фанат

oncle terrible
Команда форума
но тут я вед не хочу что-бы пхп каждый подсчёт заносил в базу
не понял.
а зачем в базу-то заносить? что - это единственный способ запомнить число? других нету?
то есть, если тебе надо вывести юзеру строку "Хелло", то ты сначала её запишешь в базу, потом запросишь, а потом выведешь? И всё это в одном и том же скрипте? Ты правда так делаешь?

и вообще, зачем запоминать? тебе же надо его просто сразу сказать, в конце коробки? а дальше-то его помнить зачем?
 

RigVan

Постоянный член клуба
nixsoid

сделай вложенный цикл и дело с концом!
 

nixsoid

Новичок
Автор оригинала: Фанат
не понял.
а зачем в базу-то заносить? что - это единственный способ запомнить число? других нету?
то есть, если тебе надо вывести юзеру строку "Хелло", то ты сначала её запишешь в базу, потом запросишь, а потом выведешь? И всё это в одном и том же скрипте? Ты правда так делаешь?

и вообще, зачем запоминать? тебе же надо его просто сразу сказать, в конце коробки? а дальше-то его помнить зачем?
Да ты прав запоминат не надо в базу просто как я понял надо присвоит это переменной и вывести!
Я кажется уловил надо определит сколько строк попал под запрос допустим Яблок и в этих строках суммировать количество и выводит и так далее. Я прав?
 

Фанат

oncle terrible
Команда форума
нет

-~{}~ 20.03.06 14:45:

RigVan
у него уже есть вложенный цикл.
и он ему не нужен

а теперь не пиши, пожалуйста, больше в этот топик.

-~{}~ 20.03.06 14:46:

nixsoid
не надо ничего определять.
тебе не нужны никакие подзапросы.
тебе нужен ОДИН запрос, и выводя его данные надо просто стоять и считать.
как карандаши
 

nixsoid

Новичок
тебе нужен ОДИН запрос, и выводя его данные надо просто стоять и считать.
как карандаши
Ты имееш ввиду вот так:
PHP:
$sql4 = "SELECT * FROM tab where typeid='$typeid' and type='$type'"; 
$result4 = @mysql_query($sql4,$db); 
for   ($k = 0; $k < @mysql_num_rows($result4); $k++) { 
      $qty = @mysql_result($result4, $k, "qty"); 
$qty1+=$qty;
}
 

Фанат

oncle terrible
Команда форума
нет.
ниего такого я не имею в виду.
я вообще никакой код не имею в виду.
прежде, чем писать код, тебе нужно понять, что ты делаешь.
тебе надо вывести все продукты.
где в этом коде видно, что выводятся все?

-~{}~ 20.03.06 15:06:

давай-ка снова про карандаши.
только именно так, как у тебя с базой.
то есть, количество карандашей в коробке никуда не запоминается, а сразу говорится.
 

nixsoid

Новичок
тебе надо вывести все продукты.
где в этом коде видно, что выводятся все?
тогда так:
PHP:
$sql4 = "SELECT * FROM tab";  
$result4 = @mysql_query($sql4,$db);  
for   ($k = 0; $k < @mysql_num_rows($result4); $k++) {  
      $id = @mysql_result($result4, $k, "id"); 
      $des = @mysql_result($result4, $k, "des"); 
      $qty = @mysql_result($result4, $k, "qty"); 
      $type= @mysql_result($result4, $k, "type"); 
      $typeid= @mysql_result($result4, $k, "typeid"); 

if ($typeid=='$typeid')
{
$qty1+=$qty; 
}
else
{
}
}
то есть выводятся все продукты а потом сравнивается с типом и слагается!
 

Фанат

oncle terrible
Команда форума
но тебе же надо их выводить по порядку? сначала яблоки, потом груши?
и забудь про функцию mysql_result
весь мир пользуется давно mysql_fetch_array

вот этот кусок кода
if ($typeid=='$typeid')
{
$qty1+=$qty;
я вообще не понял.
ни для чего он нужен, ни вообще синтаксиса.

-~{}~ 20.03.06 15:17:

а потом сравнивается с типом и слагается!
когда потом?
с каким типом сравнивается?
 

nixsoid

Новичок
вот этот кусок кода
я вообще не понял.
ни для чего он нужен, ни вообще синтаксиса.

-~{}~ 20.03.06 15:17:


когда потом?
с каким типом сравнивается?
Это просто я в общем имел ввиду так ли или нет.

-~{}~ 20.03.06 15:41:
PHP:
$sql4 = "SELECT * FROM tab order by type";   
$result4 = @mysql_query($sql4,$db);   
$fetched = mysql_fetch_array($result4)){
echo "$fetched['qty']";
}
А дальше не уверен как?
 

Фанат

oncle terrible
Команда форума
постой.
тебе же надо все строки выводить?
а почему ты здесь выводишь только одну?
 
Сверху