我正在研究一些与创建定期发票有关的php代码。我需要一些帮助来思考逻辑。我想最终我会得到一种Insert/Select语句。最终生成的php代码将在夜间cron中运行。插入选择语句,对字段和逻辑思维进行更改
首先,让我向您展示一些我的表格项目以供参考,并解释一下他们的工作。该表被称为发票,并且还有其他表与其相关联,但我认为如果我现在可以指定这个表的逻辑,我可以将它应用于其他表。
ID =这是自动递增的主键,也恰好是发票号码。
recurring =这是发票是一次还是反复发生。 O =一次,M =每月等
recurred =这将在插入时设置为N,并且是我用来查看表中创建的下一个循环发票是否应基于此的逻辑发票与否。当新的循环发票被插入到表中时,这将被更改为Y,以便不再由cron作业处理它。
date =这是发票被插入/创建的日期。例如,如果发票的创建日期是本月15日,则下一个发票将是下个月的15日。基本上M代表每月。然而,我还没有想出如何处理31日的创建日期,但下个月只有30天,可以在这里使用一些帮助。
所以这里是我的逻辑。首先,我运行查询以查找不在o所有的行和复发= N.
$result = mysql_query("SELECT * FROM invoice WHERE recurring != 'O' and recurred
= 'N'“)或死亡(mysql_error());
接着,我在每个工作那种每月,Q季报等经常性的M ..
if recurring = M
if todays date day = 'date' day
copy line item into a new row with the following changes: new ID, todays date, and mark the recurred to N for the new insert (will mark the old one Y)
显然是不实际的代码,只是我在想什么的。
所以我的问题是:1)如何创建插入选择语句来处理chang ed变量和2.)如何处理发票在一个月的31日创建并且下一个月只有30天(或28)的日期。
谢谢,我会试试看。不知道什么枚举与布尔值意味着什么。你能详细说明吗? – Tom 2013-04-10 21:08:59
Avetis,我将不得不计算每月(M)季度(Q)半年一次(S)年度(A)的计算。你是否推荐我为每种类型运行这个查询,因为你添加了diff> = 30?或者我应该运行一次,并得到一切,并与if语句排除? – Tom 2013-04-10 21:19:46
关于enum和boolean,你使用字母O,Y,N,M作为“字符串”来标识事物,这对数据库不利,你应该根据逻辑改变类型,所以如果你需要yes/no如果你有几个选项,比如monthly/quarterlu/daily,那么字段类型应该是enum,在那里你可以有确切的名字枚举(每日,每月.eg),它将全部都是布尔(真/假)工作效率更高。 – 2013-04-10 21:46:20