Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在MySQL的日期列中添加天数?_Php_Mysql - Fatal编程技术网

Php 如何在MySQL的日期列中添加天数?

Php 如何在MySQL的日期列中添加天数?,php,mysql,Php,Mysql,我在数据库中有一个简单的表。该表具有“开始日期”和“添加天数”列。这是具有“正常选择”的表: 我知道如何将日期添加到“开始”列。但是,如何使日期开始值与上一个日期开始值相同 我的当前选择: 选择日期添加日期开始,间隔添加天数作为“新日期”,从测试添加天数 我的预期产出: id new_date added_days 1 2017-10-10 2 2 2017-10-12 4 3 2017-10-16

我在数据库中有一个简单的表。该表具有“开始日期”和“添加天数”列。这是具有“正常选择”的表:

我知道如何将日期添加到“开始”列。但是,如何使日期开始值与上一个日期开始值相同

我的当前选择:

选择日期添加日期开始,间隔添加天数作为“新日期”,从测试添加天数

我的预期产出:

id      new_date    added_days
 1    2017-10-10             2
 2    2017-10-12             4
 3    2017-10-16             6
 4    2017-10-22             6
 5    2017-10-28             3 
注:
我也接受PHP解决方案,如果它在MySQL中不可能实现的话,这个概念也可以用同样的方法实现。我使用MySQL变量,就像一个在线程序一样

select
          @lastDate := date_add( if( @lastNumDays = 0, date_start, @lastDate ), INTERVAL @lastNumDays DAY ) as new_Date,
          @lastNumDays := added_days as added_days
       from
          YourTable ,
          ( select @lastDate := '2017-01-01',
                   @lastNumDays := 0 ) SQLVars;
SQLVARS别名用于在线创建变量。。。一个虚假的占位符日期,最后的天数默认为0,因此没有实际添加天数

select字段将使用-在第一次传递实际的第一个日期时,将零天作为开始,然后将该值设置到@lastDate变量中,以便在下一条记录中使用。下一个字段将天数分配到@lastNumDays变量中,用于下一条记录的日期添加过程

我的工作解决方案可以在

澄清

两个变量用于保存最后一个日期,一个变量用于保存当前记录之后的提前天数。因此,要按顺序处理行,请将其视为

@lastDate='2017-01-01'-充当占位符声明的变量 @lastNumDays=0-用于后续添加到基准日期的其他占位符

第一条记录应用了IF,@lastNumDays=0,因此它将日期开始放入@lastDate变量,但成为新的日期列。接下来,将added_Days存储到@lastNumDays变量中,并成为added_Days列

因此,在根据样本数据处理的第一行末尾

@lastDate = '2017-10-10' and
@lastNumDays = 2
现在,我们进入数据的第二行。 IF在@lastNumDays中有一个值,使用@lastDate代替,并向其添加2天。所以现在

@lastDate = '2017-10-12'
@lastNumDays = 4
下一张唱片。。。将添加4天的日期应用于10/12日期,并成为

@lastDate = '2017-10-16'
@lastNumDays = 6

等等。。现在,只需预先定义该列作为起始点,就可以简化开始日期的固定列值这一事实,但我对您的环境、临时/永久表等了解不够,无法进行调用,只足以得到您想要的答案。

不可能?几乎不看那个链接是关于什么的?它是关于为我们节省一些类型。g:如果需要的话,我已经添加了一个提琴为什么@lastDate是2017-01-01?这里的变量比严格意义上的要多necessary@Strawberry,真的,让我们看看。。。我使用lastDate作为变量的占位符,在第一个日期开始记录之间的循环循环之后。我使用lastNumDays来保存应用于下一条记录时的日期提前多少天。如果你有一个更优雅的解决方案,我很乐意看到。@Vahn,请参阅修订后的答案,以澄清步骤。请参阅我在页面上的进一步评论。
@lastDate = '2017-10-12'
@lastNumDays = 4
@lastDate = '2017-10-16'
@lastNumDays = 6