【问题标题】:Arithmetic Calculation based on previous MySQL queries基于先前 MySQL 查询的算术计算
【发布时间】:2014-11-09 11:26:50
【问题描述】:

我有一个带有“帐户”表的数据库,其中包含各种类型的交易。我成功地进行了查询以找到“总贷方”和“总借方”。我需要帮助来计算余额。即,如果“总贷方 > 总借方”答案应该是“余额 Cr”。否则,如果“总贷方

<?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 math addition subtraction


    【解决方案1】:

    这是关于查询,而不是 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 获取特定帐户的信息,但这不在您的原始数据中。

    【讨论】:

    • 我只是 PHP 的初学者。我已将查询更改为上述查询。我如何打印结果?
    • 您是否更改了其余代码以反映查询中的更改?此外,这里没有理由将数组元素的值保存到另一个变量中,只需直接对元素进行比较,但@gordon-linoff 已经为您计算了余额,因此您不需要这样做。此外,我认为前两种情况和第三种情况都需要ELSE 0
    • @Elin 。 . .我原则上同意else 0。然而,这个版本模仿了原来的逻辑。
    • 我还没有更改其余代码。你能帮我吗?我只是从各个网站上找到了一些代码来总结上面的代码。我只是 PHP 和 MySQL 的业余爱好者。我一直在从 WEB 学习一切。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2014-10-18
    • 1970-01-01
    • 2012-07-12
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多