У меня есть БД с таблицей ‘account’, в которой есть различные типы транзакций. Я успешно выполнил запрос, чтобы найти «Total Credit» и «Total Debit». Мне нужна помощь для расчета баланса. Т.е., если ответ «Общий кредит> Общий дебет» должен быть «Баланс кр.» иначе если «Всего Кредит» < Total Debit «ответ должен быть» Balance Dr. «, иначе ответ должен быть» 0 »
<?php
$pp= ("SELECT SUM(amount) FROM account WHERE (mode='cash' AND type='payment') OR (mode='cash' AND type='purchase')");
$total_pp = mysql_query($pp);
while($gtotal_pp = mysql_fetch_array($total_pp)){
echo "<table><tr><td>Total Credit</td><td>:</td><td>$</td><td align='right'>" . $gtotal_pp['SUM(amount)'] . "</td></tr>";
echo "<br/>";
}
$sr = ("SELECT SUM(amount) FROM account WHERE (mode='cash' AND type='sale') OR (mode='cash' AND type='reciept')");
$total_sr = mysql_query($sr);
while($gtotal_sr = mysql_fetch_array($total_sr)){
echo "<tr><td>Total Debit</td><td>:</td><td>$</td><td align='right'>" . $gtotal_sr['SUM(amount)'] . "</td></tr>";
}
$bgtotal_pp = $gtotal_pp['SUM(amount)'];
$bgtotal_sr = $gtotal_sr['SUM(amount)'];
$balance_cr = $bgtotal_pp - $bgtotal_sr;
$balance_dr = $bgtotal_sr - $bgtotal_pp;
if ($bgtotal_pp > $bgtotal_sr)
echo "<tr><td>Balance (Cr.)</td><td>:</td><td>$</td><td align='right'>" . $balance_cr . "</td></tr></table>";
else if ($bgtotal_pp < $bgtotal_sr)
echo "<tr><td>Balance (Dr.)</td><td>:</td><td>$</td><td align='right'>" . $balance_dr . "</td></tr></table>";
else
echo"<tr><td>Balance</td><td>:</td><td></td><td align='right'>0.00</td></tr></table">;
?>
когда
$bgtotal_pp = "(some number)";
$bgtotal_sr = "(some number");
код работает отлично. Только когда я пытаюсь перенести предыдущий запрос вместо некоторого числа, он всегда показывает «оператор Else».
Заранее спасибо.
Это относится к запросам, а не к php-коду (с такими проблемами, как использование mysql_). Почему вы делаете несколько запросов, а затем арифметику в приложении. Вы можете сделать все это одним запросом:
SELECT SUM(CASE WHEN mode = 'cash' and type in ('payment', 'purchase') then amount end) as Credit,
SUM(CASE WHEN mode = 'cash' and type in ('sale', 'receipt') then amount end) as Debit,
SUM(CASE WHEN mode = 'cash' and type in ('payment', 'purchase') then amount
WHEN mode = 'cash' and type in ('sale', 'receipt') then - amount
ELSE 0
END) as Balance
FROM account;
Обычно я бы ожидал where
пункт или group by
чтобы получить информацию для определенных учетных записей, но это не в ваших исходных данных.
Других решений пока нет …