【问题标题】:Cash book record Inventory system现金簿记录 库存系统
【发布时间】:2014-10-20 05:39:03
【问题描述】:

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

问题出在现金记录上。

我有一个页面可以手动制作现金记录,可以选择贷记或借记,但主要是用于信用记录,因为销售额将自动存储在销售表中,并将现金表存储为借方。

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

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

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

这一切都可以很好地检查月份;y 现金流量。

问题是我不希望它只是一个月(虽然需要每月的现金流,而且已经很好了)。

通过以上内容,我进行如下查询:

$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 作为借方。这应该是新月份的起始余额。

【问题讨论】:

  • 您如何确定下个月的起始现金是多少?上个月的利润?您还可以发布一个包含几个月数据的 sqlfiddle 并获得预期结果吗?
  • @JohnRuddell 是的,一个月的起始现金将是上个月的利润。我会尝试给一个链接到 sqlfiddle
  • 如果您从事会计工作,请创建general ledger 之类的。不需要在单独的列中记录,您可以表示具有正值或负值的那些。这使得SUM(x) 代表当前账户余额。
  • @user2666633 你希望最终输出是什么?
  • @tadman 但要将其显示在如上图所示的表格上,我将不得不执行 if($cash->amount

标签: php mysql sql database-design


【解决方案1】:

所以我所做的只是在获得起始现金之前联合了一行。我不知道您是否希望它位于不同的列中或您希望它放置的位置,所以我只是添加了两个额外的列。一个是上个月的日期,带有起始现金,然后是普通列。您可以相应地调整它。

关键是使用 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

【讨论】:

  • @user2666633 确定。我不确定你是否需要额外的行,所以你可以改变它。但你必须为返回的列数输入一个空白值表:)
  • 谢谢,如果我想在本月之前对全部现金进行 sum(debit)-sum(credit),我该怎么做?对不起,我不擅长 sql 写作
  • 如果你想要它用于当前月份之前的所有内容,那么你只需要做你的日期
猜你喜欢
  • 2017-03-24
  • 2020-05-10
  • 2014-09-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多