我几乎用小型库存系统完成工作,但遇到了“概念”问题。

问题出在现金记录上。

我有一个页面可以手动创建现金记录,可以选择贷记还是借记,但是大多数情况下这是贷记记录,因为销售将自动存储在销售表中,现金表也存储为借方。

因此现金表如下所示:

  Date       | description   | debit | credit  |
  2014-08-23 | sales         | 456   |         |
  2014-08-23 | transportation|       | 234     |
  2014-08-23 | donation      | 567   |         |


我正在使用上表计算每月利润(借方-贷方=利润)

这一切都很好,可以检查月现金流量。

问题是我不希望它只有一个月(尽管需要每月现金流,并且已经可以了)。

与上面我做一个查询,像:

$date = date("Y-m");
$sql = "SELECT * FROM cash WHERE date LIKE '$date%'"


所以这将给我该月的所有信息。

现在的主要问题是:

我希望下个月的起始现金是上个月的利润(结转的余额),它将能够显示业务的利润,而不仅仅是一个月的利润。

我想不出做到这一点的最佳方法

编辑(我怎么做):

数据库:

CREATE TABLE cash
(
 id int auto_increment primary key,
 date DATE,
 descs varchar (255),
 debit varchar(30),
 credit varchar (30)
);

INSERT INTO cash
(date, descs, debit, credit)
VALUES
('2014-08-24', 'balance b/f', '5000',''),
('2014-08-24', 'transportation','', '350'),
('2014-08-24', 'sales','2340', '');


我的数据库查询

$date = date('Y-m');

$sql = "SELECT * FROM cash WHERE date LIKE '$date%'" //this will get all from same year and month


PHP页面

我现在有一个$cashs,其中包含SQL查询结果的数组。那我做

     <table class="table table-striped table-hover" id="table">
                        <thead>
                          <tr>
                            <th>No/s</th>
                            <th>Date</th>
                            <th>Purpose</th>
                            <th>Debit</th>
                            <th>Credit</th>
                          </tr>
                        </thead>
                        <tbody>
                        <?php $i=1; $total=0; foreach($cashs AS $cash): ?>
                        <tr>
                          <td><?php echo $i; ?></td>
                          <td><?php echo $cash->date; ?></td>
                          <td><?php echo $cash->desc; ?></td>
                          <td><?php echo $cash->debit; $total+=$cash->debit; ?></td>
                          <td><?php echo $cash->credit; $total-=$cash->credit; ?></td>
                        </tr>
                        <?php $i++; endforeach; ?>
                        <tr>
                          <td><strong>Total</strong></td>
                          <td></td>
                          <td></td>
                          <td></td>
                          <td><strong><?php echo $total; ?></strong></td>
                        </tr>
                        </tbody>
                       </table>


这工作正常,但是我想要的是一种获得上个月以上代码中使用的$total的方式,因此它将b / f作为余额记入借方。那应该是新月的期初余额。

最佳答案

所以我所做的就是在获得起始现金之前连续工会。我不知道您是否希望将其放置在其他列中或将其放置在何处,所以我只添加了两个额外的列。一个用于上个月的日期,起始现金,然后是普通列..您可以相应地进行调整。

关键是使用WHERE中的日期。因此,对于您而言,需要进行一些调整。

SELECT
    CONCAT(MONTH(date), '-', YEAR(date)) as 'Pervious Month',
    '' as id,
    '' as 'date',
    '' as description,
    '' as debit,
    '' as credit,
    SUM(debit) + SUM(credit) as "Starting Cash"
FROM cash
WHERE MONTH(date) = 7

UNION

SELECT '', c.*, ''
FROM cash c
WHERE MONTH(c.date) = 8


DEMO

我只是用month,因为我没有php设置。但是您要做的是将第一个选择中的MONTH(date) = 7更改为

date = $date - INTERVAL 1 MONTH


然后第二个选择将与您最初的选择相同

WHERE date = $date


编辑:

如果您想将期初余额从上个月更改为当月之前的所有内容,请更改

date = $date - INTERVAL 1 MONTH


对此:

date < $date

10-08 18:17