显示适当的余额,按降序显示MySQL行

时间:2013-05-13 12:29:30

标签: php mysql

我有一个查询,应该显示存款,取款和余额。我总结存款和取款以获得余额。

ORDER BY日期ASC时,查询和显示正常。

但是,我希望按DESC订购,这会导致余额显示出现问题。这是一个例子。

Date   Deposit   Withdrawl   Balance
Jan 2            $2000       -$2000
Jan 1  $5000                 $3000

正如你所看到的,我希望1月1日的余额为5000,而1月2日的余额为3000.我坚持找到解决这个问题的好方法。起初,我只是创建了一个平衡列,并在写入行时插入了余额。但是,当更新单行时,这会导致问题。

任何帮助表示赞赏!感谢。

这是我正在使用的代码。

$result2 = mysql_query("SELECT * FROM bankaccount_transaction WHERE bankaccount_id = '$id' ORDER BY ID DESC ".$pages->get_limit()) or die(mysql_error());

while($row2 = mysql_fetch_array($result2)) {
$date = date('m-d-Y', strtotime($row2['date']));

if ($row2['deposit'] > 0){
$deposit = $row2['deposit'];
$newdeposit = number_format($deposit,2);
$newtotal += $deposit;
}else{
$newdeposit = '';
}

if ($row2['withdrawl'] > 0){
$withdrawl = $row2['withdrawl'];
$newwithdrawl = number_format($withdrawl,2);
$newtotal -= $withdrawl;
}else{
$newwithdrawl = '';
}

display table

}

3 个答案:

答案 0 :(得分:2)

SELECT x.*
     , SUM(y.deposit)-SUM(y.withdrawal) Balance 
  FROM transactions x 
  JOIN transactions y 
    ON y.bankaccount_id = x.bankaccount_id
   AND y.date <= x.date
 WHERE x.bankaccount_id='$id' 
 GROUP 
    BY x.date 
 ORDER 
    BY Date DESC;

这是fiddle

答案 1 :(得分:1)

如果没有关于您的问题的更多信息,我会说您希望在每次交易时将余额存储在数据库中。否则,要计算任何时间点或当前余额的余额,您始终必须加载并对数据库中的每一行求和。

答案 2 :(得分:1)

我在考虑做这样的事情:

SELECT 
    m.`date`, 
    m.`deposit`, 
    m.`withdrawal`,
    SUM(t.`deposit`) - SUM(t.`withdrawal`) AS `balance`
FROM `bankaccount_transaction` m 
    JOIN (
            SELECT 
                `date`,
                `deposit`,
                `withdrawal`
            FROM 
                `bankaccount_transaction`
        ) t ON t.`date` <= m.`date`
GROUP BY 
    m.`date`, 
    m.`deposit`, 
    m.`withdrawal`
ORDER BY m.`date` DESC

我正试图看看我是否可以开始小提琴。

编辑: 在这里:http://sqlfiddle.com/#!2/8d040/9