我差不多完成了一个小型库存系统,但我有一个"概念"问题
问题在于现金记录。
我有一个页面可以手动制作现金记录,可选择信用卡或借记卡,但大多数情况下这是用于信用记录,因为销售将自动存储在销售表中,并存储现金表作为借方。
所以现金表看起来像这样:
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。这应该是新月的起始余额。
答案 0 :(得分:0)
所以我所做的就是在获得起始现金之前联合起来。我不知道您是希望它位于不同的列中还是您想放置的位置,所以我只添加了两个额外的列。一个是上个月的日期,有起始现金,然后是普通的列......你可以相应地调整它。
密钥是在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
我只是使用月份,因为我没有设置php ..但你要做的是将第一个选择中的MONTH(date) = 7
更改为
date = $date - INTERVAL 1 MONTH
然后第二个选择与原来的相同
WHERE date = $date
如果您想将上个月的陈述余额更改为当月之前的所有内容,请更改
date = $date - INTERVAL 1 MONTH
到此:
date < $date