Одна таблица с именем 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
Кажется тоже нормально. благодаря
Вы ошибаетесь. Вы можете получить сумму через сам заявление 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