Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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_Date - Fatal编程技术网

Php 获取最近的连续日期周期MySQL

Php 获取最近的连续日期周期MySQL,php,mysql,date,Php,Mysql,Date,我有一张MySQL表: | Date | Room | State | |2015-06-15 | 26 | 1 | |2015-06-16 | 26 | 1 | |2015-06-17 | 26 | 1 | |2015-06-18 | 26 | 1 | |2015-06-20 | 26 | 1 | |2015-06-21 | 26 | 0

我有一张MySQL表:

| Date           | Room | State |
|2015-06-15      | 26   | 1     | 
|2015-06-16      | 26   | 1     | 
|2015-06-17      | 26   | 1     | 
|2015-06-18      | 26   | 1     | 
|2015-06-20      | 26   | 1     | 
|2015-06-21      | 26   | 0     | 
|2015-06-22      | 26   | 0     | 
|2015-06-23      | 26   | 1     | 
|2015-06-24      | 26   | 0     | 
|2015-06-30      | 26   | 1     | 
|2015-07-01      | 26   | 1     |
我想得到最接近的预定期(例如,2天)开始的第一个日期(这意味着连续的一天,
State=1

我怎么做

SELECT d.*
FROM   dates d
WHERE  EXISTS(SELECT `Date`
              FROM   dates
              WHERE  `Room` = d.`Room`
                     AND `Date` = Date_add(d.`Date`, INTERVAL 1 DAY)
                     AND `State` = 1)
       AND d.`State` = 1;
两天

SET @days=3;

SELECT d.*
FROM   dates d
WHERE  (SELECT Count(`date`)
        FROM   dates
        WHERE  `Room` = d.`Room`
               AND `Date` <= Date_add(d.`Date`, INTERVAL @days - 1 DAY)
               AND `Date` >= d.`Date`
               AND `State` = 1) >= @days
       AND d.`State` = 1; 
查询实际上返回所有可能的日期。要仅获取一个日期,请在语句末尾添加
限制1
。但是,如果可能的话,晚一点开始可能会有很大帮助。 第二个查询与testdata一起返回以下日期:

2015-01-06  26  1
2015-01-10  26  1
2015-01-11  26  1

请尝试一下你是说最快的日期?类似这样的
Select*from table,其中`date`>=now()和`state`=1 order by`date`asc limit 1
提供您尝试过的查询将有助于说明您的问题所在。是的,但我必须检查该期间是否存在(连续日期)!我尝试了从预订价格中选择*,其中日期('2015-06-16')和日期('2015-06-20')之间的数据('2015-06-20'),Stato=1,Disponibilita>0和
Camera
=35组,按
Camera
have count(*)=datediff(date('2015-06-20')、date('2015-06-16'))+1`您应该有
checkin
checkout
列。这将更易于使用(读取、查询、更新、删除等),并会减少记录。每一条记录都代表一天的预定时间。预订基于许多天,因此在每一天(必须存在),状态=1。您确定,这有效吗?您正在检查是否预订了第二天,但不检查前一天是否未预订。另请参见:不,它不起作用。它返回我所有的日期,如果周期存在,我想要第一个日期。从上面的例子来看,如果周期为2天,它将返回我2015-06-15,如果周期为5,它将不返回任何内容(因为周期不存在),它可以工作,但可能您预期会有所不同。您将获得可能的第一天,其中接下来的x天的状态也为==1。如果需要state==0的所有天数,可以将state更改为0。但这不是你在问题中写的。正如我在回答中所写的那样,它返回所有可能的开始日期,但您只能获取第一个结果或添加限制语句。
2015-01-06  26  1
2015-01-10  26  1
2015-01-11  26  1