首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入对字段和逻辑思维进行更改的select语句

插入对字段和逻辑思维进行更改的select语句
EN

Stack Overflow用户
提问于 2013-04-11 03:37:06
回答 2查看 151关注 0票数 0

我正在编写一些与创建循环发票有关的php代码。我需要一些帮助来思考逻辑。我想最终我会得到一种Insert/Select语句。最终在这里生成的php代码将在夜间cron中运行。

首先,让我向您展示一些我的表项作为参考,并解释一下它们的作用。该表名为Invoice,还有其他表与之关联,但我认为如果我现在可以确定这一个表的逻辑,我就可以将其应用于其他表。

ID =这是自动递增的主键,也恰好是发票编号。

递归=这是发票是一次性还是递归的。O=One时间、M=Monthly等

当一个新的经常性发票插入到表中时,它将被更改为Y,这样它就不会被cron作业再次处理。

日期=这是发票插入/创建的日期。例如,如果发票的创建日期是本月15日,则下一次创建的发票将是下个月的15日。本质上,M代表每月。然而,我还没有想出如何处理31号的创建日期,但下个月只有30天,这里可能需要一些帮助。

这就是我的逻辑。首先,我运行一个查询来查找所有不是O且recurred = N的行。

代码语言:javascript
复制
$result = mysql_query("SELECT * FROM invoice WHERE recurring != 'O' and recurred

= 'N'")或die(mysql_error());

接下来,我处理每种循环的M表示每月,Q表示季度,等等。

代码语言:javascript
复制
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。)如何创建insert select语句来处理更改的变量和2.)如何处理日期,如果发票是在一个月的31号创建的,而下一个月只有30天(或28天)。

EN

回答 2

Stack Overflow用户

发布于 2013-04-11 04:26:23

只接受需要重新插入的行:

代码语言:javascript
复制
SELECT *, DATEDIFF(`date`, NOW()) as diff FROM invoice WHERE recuring != 'O' 
AND recured = 'N' AND diff >= 30;

遍历该列表,并对每一行使用一个新日期,计算方法为:

代码语言:javascript
复制
$newDate = date("Y-m-d", strtotime($oldDate+" +1 month"));

这应该可以解决你每月30日的问题。

现在插入新创建的数据。

另外,建议使用enum表示重复字段,使用boolean表示重复出现。

票数 1
EN

Stack Overflow用户

发布于 2013-04-11 04:32:48

我也做过类似的申请。在我的例子中,我有两个表:实际发票和经常性发票。循环表有一个名为NextDate的字段-应创建下一张发票的日期。一次将发票直接添加到invoices表中,否则cron作业将扫描循环表并检查NextDate值。如果它是过去的,那么新的发票被生成到发票表中,并更新NextDate (通常按月递增)。

在我的示例中,按月递增只会将Month值更改1。

代码语言:javascript
复制
DATE_ADD('2008-01-31', INTERVAL 1 MONTH)  --> 2008-02-29
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15934860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档