Intereting Posts

Sum php array (созданный из результатов mysql) в зависимости от значений mysql в другом столбце mysql

Одна таблица с именем 18_7_ChartOfAccounts выглядит так:

 ID | AccountNumber ------------- 1 | 2310 2 | 2380 3 | 2610 

Другая таблица, называемая 2_1_journal выглядит так:

 ID | Amount | DebitAccount -------------------------- 1 | 26.03 | 2310 2 | 200.00 | 2310 3 | 3.63 | 2380 4 | 119.83 | 2380 5 | 33.86 | 2610 6 | 428.25 | 2610 

Цель состоит в том, чтобы получить результаты, которые выглядят следующим образом:

 DebitAccount 2310 total is: 226.03 DebitAccount 2380 total is: 123.46 DebitAccount 2310 total is: 462.11 

226,03 в этом примере составляет 26,03 + 200,00

Сначала код mysql

 $query = "SELECT j.Amount, j.DebitAccount FROM 18_7_ChartOfAccounts AS c LEFT JOIN 2_1_journal AS j ON (c.AccountNumber = j.DebitAccount)"; $sql = $db->prepare($query); $sql->execute(); $data = $sql->fetchAll(PDO::FETCH_ASSOC); 

С print_r($data); получить длинный список массивов, например

 [31] => Array ( [Amount] => 26.03 [DebitAccount] => 2310 [32] => Array ( [Amount] => 200.00 [DebitAccount] => 2310 

Если в запросе mysql используйте SUM(j.Amount) тогда получите только одну общую сумму (предположим, общая сумма суммы столбца).

С

 foreach($data as $result){ if(strlen($result['Amount']) > 0 ) { echo "Amount ". $result['Amount']. "Account name ". $result['DebitAccount']. "<br>"; print_r (array_sum($result)); } } 

Получите что-то вроде этого

 Amount 123.97Account name 2310 2433.97Amount 26.03Account name 2310 2336.03Amount 200.00Account name 2310 

Любые идеи о том, как получить необходимые результаты (выделены полужирным шрифтом)?

Обновить

Изменен запрос $

 $query = "SELECT SUM(j.Amount), j.DebitAccount FROM 18_7_ChartOfAccounts AS c LEFT JOIN 2_1_journal AS j ON (c.AccountNumber = j.DebitAccount) group by j.DebitAccount"; 

с print_r($data); получить массив, подобный этому

 Array ( [0] => Array ( [SUM(j.Amount)] => [DebitAccount] => ) [1] => Array ( [SUM(j.Amount)] => 110900.16 [DebitAccount] => 2310 ) [2] => Array ( [SUM(j.Amount)] => 3660.86 [DebitAccount] => 2380 ) 

С массивом, похоже, все работает. Теперь с foreach изменилось на echo "Amount ". $result['SUM(j.Amount)']. " Account name ". $result['DebitAccount']. "<br>"; echo "Amount ". $result['SUM(j.Amount)']. " Account name ". $result['DebitAccount']. "<br>";

Получить

 Amount 110900.16 Account name 2310 Amount 3660.86 Account name 2380 Amount 85247.40 Account name 2610 

Кажется тоже нормально. благодаря

Related of "Sum php array (созданный из результатов mysql) в зависимости от значений mysql в другом столбце mysql"

Вы ошибаетесь. Вы можете получить сумму через сам заявление MySql.

Используйте сумму функции aggrgate вместе с предложением group by.

Как это,

 SELECT DebitAccount,sum(Account) from 2_1_journal group by DebitAccount 

Ваш полный код:

 $query = " SELECT DebitAccount,sum(Account) as Total from 2_1_journal group by DebitAccount"; $sql = $db->prepare($query); $sql->execute(); $data = $sql->fetchAll(PDO::FETCH_ASSOC); foreach($data as $result){ if(strlen($result['Total']) > 0 ) { echo "DebitAccount ". $result['DebitAccount']. "Total is: ". $result['Total']. "<br>"; print_r (array_sum($result)); } } 
 SELECT DebitAccount, SUM(Amount) FROM 2_1_journal GROUP BY DebitAccount 

Вы должны использовать GROUP BY в запросе

 SELECT DebitAccount, SUM(Amount) AS Amount FROM 2_1_journal GROUP BY DebitAccount