Php 日期范围之间的MySQL

Php 日期范围之间的MySQL,php,mysql,Php,Mysql,我有一个场景,在这个场景中,我需要根据下表中的示例来推迟交付日期 job_id | delivery_date 1 | 2013-01-12 2 | 2013-01-25 3 | 2013-02-15 我要做的是向用户显示所有以最早日期开始的交付日期。在本例中,最早日期为2013年1月12日,再加上21天。基本上,我希望它显示的输出当然,最早的日期是2013-01-12和2013-01-25的开始日期。2月份之后的日期不重要,因为它们不在我的21个日期范围内。例如

我有一个场景,在这个场景中,我需要根据下表中的示例来推迟交付日期

job_id | delivery_date
1      | 2013-01-12
2      | 2013-01-25
3      | 2013-02-15
我要做的是向用户显示所有以最早日期开始的交付日期。在本例中,最早日期为2013年1月12日,再加上21天。基本上,我希望它显示的输出当然,最早的日期是2013-01-12和2013-01-25的开始日期。2月份之后的日期不重要,因为它们不在我的21个日期范围内。例如,如果是5天范围,那么当然不会包括2013-01-25,只会显示最早的日期

下面是我的主要SQL子句,它只显示从今年开始的工作:

SELECT date, delivery_date 
FROM `job_sheet` 
WHERE print_status IS NULL 
    AND job_sheet.date>'2013-01-01'

是否可以使用1个SQL查询来实现这一点,或者我必须使用混合的PHP?

您可以使用以下方法:

SELECT date,
       delivery_date
FROM job_sheet
WHERE print_status IS NULL
AND job_sheet.date BETWEEN (SELECT MIN(date) FROM job_sheet) AND
                           (SELECT MIN(date) FROM job_sheet) + INTERVAL 21 DAY
select *
from job_sheet
where print_status IS NULL
  and delivery_date >= (select min(delivery_date)
                        from job_sheet)
  and delivery_date <= (select date_add(min(delivery_date), interval 21 day)
                        from job_sheet)

如果您担心日期不正确,如果您使用查询,那么最好将开始日期传递给查询,然后再添加21天以获得结束日期。与此类似:

set @a='2013-01-01';

select *
from job_sheet
where delivery_date >= @a
  and delivery_date <= date_add(@a, interval 21 day)

请参见

您可以使用以下选项:

select *
from job_sheet
where print_status IS NULL
  and delivery_date >= (select min(delivery_date)
                        from job_sheet)
  and delivery_date <= (select date_add(min(delivery_date), interval 21 day)
                        from job_sheet)

如果您担心日期不正确,如果您使用查询,那么最好将开始日期传递给查询,然后再添加21天以获得结束日期。与此类似:

set @a='2013-01-01';

select *
from job_sheet
where delivery_date >= @a
  and delivery_date <= date_add(@a, interval 21 day)

原始查询在job_sheet.date上有一个谓词;上面的查询引用了d.delivery\u日期。。。如果它应该引用instaed的date列,则将其更改

如果目的是从今天起仅显示交货日期值,则将文字“2013-01-01”更改为返回当前日期的表达式,例如DATENOW

原始查询在job_sheet.date上有一个谓词;上面的查询引用了d.delivery\u日期。。。如果它应该引用instaed的date列,则将其更改


如果目的是仅显示从今天起的交货日期值,则将文字“2013-01-01”更改为返回当前日期的表达式,例如DATENOW

我知道这将如何工作。我唯一关心的是,你如何只显示从新年开始创造的就业机会?出于某种原因,在我这方面,当我添加和交付日期>='2013-01-01'时,没有显示任何内容…如果您的交付日期在2013-01-01之前,则表示mindelivery_日期的方式将不正确。改为使用文字日期。@Dimitropaloglu我同意Catcall,如果您不确定日期范围,则应使用文字字符串作为范围的值。因此,将startdate传递到查询中,然后在该值的基础上添加21天作为结束日期。看看我的编辑,我知道这是怎么回事。我唯一关心的是,你如何只显示从新年开始创造的就业机会?出于某种原因,在我这方面,当我添加和交付日期>='2013-01-01'时,没有显示任何内容…如果您的交付日期在2013-01-01之前,则表示mindelivery_日期的方式将不正确。改为使用文字日期。@Dimitropaloglu我同意Catcall,如果您不确定日期范围,则应使用文字字符串作为范围的值。因此,将startdate传递到查询中,然后在该值的基础上添加21天作为结束日期。查看我的编辑