【问题标题】:How to program a recurring billing/invoice system using PHP and MySQL如何使用 PHP 和 MySQL 编写循环计费/发票系统
【发布时间】:2015-06-22 12:02:21
【问题描述】:

我已经使用 PHP/MySQL 编写了一个基本的发票系统,其表结构如下;

发票表; invoice_id、invoice_date、customer_id 等 发票行表; invoice_line_id、invoice_id、数量、价格、描述等

我需要系统以设定的时间间隔(例如每 1 周或每 2 个月等)自动生成未来的发票。我正在考虑按如下方式创建一个新表;

发票明细表; invoice_schedule_id、invoice_id、interval(例如 1)、interval_unit(月)、开始日期、next_processing_date

我的想法是设置一个每天执行一次 PHP 文件的 cron 作业。然后,当 next_processing_date 与今天的日期匹配时,PHP 文件将生成一张发票,并更新数据库中的 next_processing_date。我对如何实现这一点感到满意,但我坚持的是如何将新发票实际插入表/数据库中。 MySQL 是否具有任何类型的“复制行”功能,因为新发票将与原始发票相同,除了 invoice_date 必须更新。

【问题讨论】:

标签: php mysql


【解决方案1】:

Cron 听起来不错。 (另外值得一提的是 MySQL 事件调度程序,但我还是会选择 Cronjob)

副本会是这样的 SQLFIDDLE:

create table t ( id int, d date );

insert into t values( 0, CURDATE() );
insert into t values( 2, CURDATE() );
insert into t values( 1, CURDATE() );

insert into t ( select id+1,curdate() from t order by id desc limit 1 );

上面的例子是复制最新的订单作为副本,当然你可以放一个where子句 where id=1 或者你的参考订单是什么id。

【讨论】:

    【解决方案2】:

    BigScar's reference of "How to copy a row and insert in same table with a autoincrement field in MySQL?" 似乎解决了您的复制插入问题。

    但是,由于您主要执行一组特定的数据库查询,而不是 cronjobs,您可以使用MySQL events。如果您的 MySQL 版本支持它们(检查 phpmyadmin:选择一个数据库并查看顶部菜单栏,您可以在那里创建它们,甚至不必知道语法),这是一个很好的实用替代方案。

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2015-06-28
      • 2018-06-30
      相关资源
      最近更新 更多