Php 获取最近的连续日期周期MySQL
我有一张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
| 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