Извеждане на сумата на два реда с по две колони

r_a_s

Registered
Здравейте, в първата заявка имам два резултата, подавам ги към втората заявка по ид и искам да ми извади сумата от редовете на колона 1 * колона 2, тоест имам два реда, на единия ако се получава 5 от умножението на колона 1 * колона 2, а на другия 10, общо да ми изведе 15? Проблемът е, че при този код, който съм написал ми вади два резултата, тоест в примера ще ми изведе 5 и 10 отделно, а аз искам да ми изведе един резултат 15! Къде бъркам?

Код:
$sql = mysql_query("SELECT id FROM `ne6to`") or die (mysql_error());
while($row = mysql_fetch_array($sql)){
$id = $row['id'];

$sql2 = mysql_query("SELECT SUM(kolona1 * kolona2) AS total FROM `ne6to2` WHERE `id`='$id'") or die (mysql_error());

  while($row2 = mysql_fetch_array($sql2)){
    $total= $row2['total'];
    echo $total.'</br>';
  }

}
 
Значи за всяко id от neshto, трябва да се изведе произведението от сбора на стойностите на колоните col1 и col2, за които id-то е $id?
Втората заявка би трябвало да изглежда така:
PHP:
$sql2 = mysql_query("SELECT SUM(kolona1) * SUM(kolona2) AS total FROM `ne6to2` HAVING `id`='$id'") or die (mysql_error());
:?:
Използва се HAVING за да сумират само редовете с id=$id. С where първо ще се сумират и умножат, и после от полученото ще се вземат редовете с id=$id, което не върши работа, в случая.
 
не с HAVING нищо не става не ми извежда нищо :) първо ми даде грешка, че не намира колона id сложих в заявката ид пред сумирането и се оправи грешката, но не ми вади нищо, а с where ми вади по отделно двата реда, а не общо!

Ето какво направих:
Код:
$sql2 = mysql_query("SELECT id, SUM(kolona1) * SUM(kolona2) AS total FROM `ne6to2` HAVING `id`='$id'") or die (mysql_error());
 
Пробвай без
as total
като в извеждането на заявката не използвай
$row['total']
а
$row[1]

Може да не го разчита правилно.
 
За момента не сещам от какво може да е, но ми хрумна, че може да пошзваш нещо като това:
Код:
$sql2 = mysql_query("SELECT id, SUM(kolona1) AS a,  SUM(kolona2) AS b FROM `ne6to2` HAVING `id`='$id'") or die (mysql_error());
Така ще получиш наведнъж сбора от двете колони и ще можеш да го изкараш с php като произведение на две променливи:
PHP:
echo $row['a'] * $row['b'];
 
егати, пак нищо не става, с having нищо не ми излиза, а с where ми излизат отделно. С where на "а" ми излизат двата резултата на колона 1, а на "b" двата резултата на колона 2.
 
Обработи си резултатите в PHP.
Функция за умножение на редове от една и съща колона в таблица няма(събиране на различни редове в една и съща колона може и това чрез SUM, но няма за умножение), възможно е да се постигне с някакъв цикъл или JOIN на таблицата неопредел път и умножение на стойностите.
Не е нужно да си усложняваш нещата вземи резултатите от таблиците и си направи сметките в PHP.

Двете заявки в едно:
[sql]
SELECT t1.id, GROUP_CONCAT(t2.kolona1 SEPARATOR '-') AS kolona1, GROUP_CONCAT(t2.kolona2 SEPARATOR '-') AS kolona2 FROM neshto t1 LEFT JOIN neshto2 t2 ON t1.id = t2.id ORDER BY t1.id
[/sql]

Резултата, който ще ти върне ще е от сорта на:

id - 1, kolona1[2-4-6-8-2], kolona2[1-5-6-4-5]
id - 2, kolona1[1-4-2-8-2], kolona2[2-5-3-4-5]
id - 3, kolona1[5-5-6-3-2], kolona2[1-3-6-4-4]

ETC.

Пускаш един цикъл:
PHP:
foreach($row as $user) {
   $kolona1 = explode('-', $user['kolona1']);
   $kolona2 = explode('-', $user['kolona2']);
   
   $result = array('kolona1' => 1, 'kolona2' => 1);

   for($i = 0; $i < count($kolona1); $i++) {
        $result['kolona1'] = $result['kolona1']*$kolona1[$i];
        $result['kolona2'] = $result['kolona2']*$kolona2[$i];
    }
  
  echo "RESULT FOR ID:".$user['id']." IS:".$result['kolona1']+$result['kolona2'];

}
 
Снощи съм бил много заспал - съвсем забравих за group by. Трябваше да бъде така:

PHP:
$sql2 = mysql_query("SELECT id, SUM(kolona1) AS a,  SUM(kolona2) AS b FROM `ne6to2` group by id where `id`='$id'") or die (mysql_error());
...
echo $row['a'] * $row['b'];
Което ме подсети, че в този случак трябва да използваш where, а не having.
 
Автора иска да умножи редовете във всяка колона и да събере резултатите от колоните. Тази заявка която си дал не е прави това. Също така по правилно да се напише тази заявка така:

Тя обединява 2 те таблици и вади резултат от този сорт:

id - 1
result - 56
-----------
id - 2
result - 34
-----------
id - 3
result - 76

ETC.

result е: Сумата на редовете в дадената колона + сумата на другите редове в дадената друга колона. Умножени двата резултата. Това според всяко ID.

[sql]
SELECT t1.id,SUM(t2.kolona1)*SUM(t2.kolona2) AS result FROM neshto t1 LEFT JOIN neshto2 t2 ON t1.id = t2.id GROUP BY t1.id
[/sql]
 

Back
Горе