2016-10-01 3 views
0

У меня есть запрос, который возвращает список строк из базы данных mysql, список сгенерированных строк имеет одинаковые значения строк.Значения групп и сумм в цикле while в php

Table 
id mAmount paidAmount 
1  100  50 
1  100  30 
2  200  20 
2  200  150 

Я на самом деле хочу суммировать paidAmount и вычесть из всего одного из mAmount значения в том же id.

Например

1 | (100) - (50 + 0) = 50 | 
1 | (100) - (30 + 50) = 20 | 
2 | (200) - (20 + 0) = 180 | 
2 | (200) - (150 + 20) = 30 | 

Я не хочу, чтобы кто-либо, чтобы дать мне целые коды, но идея о том, как идти об этом, используя либо PHP с в то время как операторов цикла или, возможно, по каждому элементу. Спасибо, очень признательны.

+1

Вот хороший учебник по ' SUM() 'http://www.mysqltutorial.org/mysql-sum/ - Вернитесь назад, когда вы что-то пробовали, и у вас были проблемы с чем-то. –

+0

@ Fred-ii- Я могу использовать SUM() для этого в sql-запросе, но проблема в том, что я хочу сделать это, используя инструкцию php while. – MessiahCoder

+0

@ Fred-ii- не имеете в виду ... * "try SUMthing" *? – charlietfl

ответ

0

Просто нужно выполнить цикл и аккумулировать оплаченную сумму, а затем выполнить вычитание. Для этого примера я полагаю, вы предзаказ ваши записи по идентификатору и передавать записи на многомерный массив называемые строки:

$currentId = $rows[0]['id']; 
$accumulated = 0; 
foreach ($rows as $row) { 
    if ($row['id'] != $currentId) { 
    $accumulated = 0; 
    $currentId = $row['id']; 
    } // end if not current id 

    $accumulated += $row['paidAmount']; 
    $balance = $row['mAmount'] - $accumulated; 
    $row['balance'] = $balance; 
    $result[] = $row; 
} // end foreach 

print_r ($result); 

Результаты печатаются так:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [mAmount] => 100 
      [paidAmount] => 50 
      [balance] => 50 
     ) 

    [1] => Array 
     (
      [id] => 1 
      [mAmount] => 100 
      [paidAmount] => 30 
      [balance] => 20 
     ) 

    [2] => Array 
     (
      [id] => 2 
      [mAmount] => 200 
      [paidAmount] => 20 
      [balance] => 180 
     ) 

    [3] => Array 
     (
      [id] => 2 
      [mAmount] => 200 
      [paidAmount] => 150 
      [balance] => 30 
     ) 
    ) 
Смежные вопросы