【问题标题】:Automatically incrementing invoice numbers, resetting to zero each month自动递增发票编号,每月重置为零
【发布时间】:2019-05-10 16:18:08
【问题描述】:

我有这个问题,我不知道如何创建发票编号。我希望它像这样工作:

  1. 我从表格 invoices 中下载所有已付款的发票,付款状态为 OK。
  2. 我从 invoice_order 下载了最高的编号,我将其添加到 +1 并创建下一个数字,这意味着付款=OK 的人的发票编号
  3. 在 invoices/invoice_order 表中保存新的发票编号
  4. 每次有新的已付款发票时都会这样,因此在给定月份有连续性

您有什么想法可以完成这项工作吗?

    $year = date('Y'); 
    $month = date('m');
    $curent_date = date('Y-m-d');           

    $ask = $conn->createCommand("SELECT * FROM invoices WHERE payment = 'OK' "
            . "AND invoice_month=$month AND invoice_year=$year");
    $data = $ask->query();  

    while (($row = $data->read()) !== FALSE) { 
        if($row['invoice_suffix'] != 'KOR') {

                echo $row['ID'].'<br>';  
        }          



    } 

【问题讨论】:

  • 为什么不直接使用auto_increment 列?
  • 因为我想将所有发票放在一张表中。自动增量意味着我每个月需要 12 个表,对吗?您能否解释一下如何以正确的方式存储发票?
  • "自动增量意味着我每个月需要有 12 个表" 为什么?您实际上可以将所有内容放在一个带有时间戳和状态的表中。
  • 自动增量在这种情况下不起作用,因为他只想在订单状态 = OK 时增加 a) 和 b) 每个月重置为零

标签: php mysql invoice


【解决方案1】:

这个问题有点难以理解,但我认为您希望发票在支付后收到连续的order_number a) 无论何时支付 或 b) 每个月都会重置数字.

如果 A(每个 invoice_order 都是唯一的)

UPDATE invoices t1,
       (SELECT MAX(invoice_order)+1 as x FROM invoices WHERE payment = 'OK') t2
SET t1.payment = 'OK', t1.invoice_order = t2.x
WHERE t1.id = INVOICE_TO_BE_UPDATED;

如果B(每个月都有一组新的重复订单号)

UPDATE invoices t1,
       (SELECT month, year, MAX(invoice_order)+1 as x FROM invoices WHERE payment = 'OK' GROUP BY month, year) t2
SET t1.payment = 'OK', t1.invoice_order = t2.x
WHERE t1.id = INVOICE_TO_BE_UPDATED AND t1.month = t2.month AND t1.year = t2.year;

在这里提琴:https://www.db-fiddle.com/f/ccS723rK7vCjdJBdDihjj6/0

【讨论】:

  • 嗯,这就是我想要做的我想在 invoice_order 列中给出一个唯一的发票编号,从 1 到 X 在每个月和年。所有发票都有一张名为 invoices 的表格。所以我的问题是我应该只使用 SQL 查询来更新发票表中的 invoice_order 列吗?非常感谢你们的回答者! :)
  • 所以使用我上面的选项 B,它应该可以工作。您可以使用 SELECT month, year, MAX(invoice_order)+1 as x FROM invoices WHERE payment = 'OK' GROUP BY month, year 进行测试,这应该会为您提供每个月/年组合的正确 ID。
  • 是的,这个解决方案运行良好。非常感谢你们,干得好!
猜你喜欢
  • 2012-02-23
  • 2015-03-27
  • 2016-03-14
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 2018-11-23
相关资源
最近更新 更多