我几乎用小型库存系统完成工作,但遇到了“概念”问题。
问题出在现金记录上。
我有一个页面可以手动创建现金记录,可以选择贷记还是借记,但是大多数情况下这是贷记记录,因为销售将自动存储在销售表中,现金表也存储为借方。
因此现金表如下所示:
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