现金账簿记录库存系统

时间:2014-08-26 19:16:32

标签: php mysql sql database-design

我差不多完成了一个小型库存系统,但我有一个"概念"问题

问题在于现金记录。

我有一个页面可以手动制作现金记录,可选择信用卡或借记卡,但大多数情况下这是用于信用记录,因为销售将自动存储在销售表中,并存储现金表作为借方。

所以现金表看起来像这样:

  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。这应该是新月的起始余额。

Picture of result

1 个答案:

答案 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

DEMO

我只是使用月份,因为我没有设置php ..但你要做的是将第一个选择中的MONTH(date) = 7更改为

date = $date - INTERVAL 1 MONTH

然后第二个选择与原来的相同

WHERE date = $date

编辑:

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

date = $date - INTERVAL 1 MONTH

到此:

date < $date