检查公开约会日期

时间:2017-11-09 02:21:12

标签: mysql

我有一个mysql表:

--------------
booked_dates 
--------------
2017-11-28
2017-11-27
2017-11-26
2017-11-25
2017-11-24
2017-11-23
2017-11-22
2017-11-21
2017-11-20
2017-11-19
2017-11-18
2017-11-17
2017-11-07
2017-11-06
2017-11-05
2017-11-04
2017-11-03
2017-11-02
2017-11-01
--------------

我有一个搜索表单,我将其设置为返回YES或NO(可用性)

如果人们在2017-11-02(至)和2017-11-26(来自)之间进行搜索并检查3天的时段,则搜索应返回YES,因为2017-11之间有3天免费07和2017-11-17。

我一直在尝试使用TIMESTAMPDIFF,但却在努力寻找合适的查询。

2 个答案:

答案 0 :(得分:1)

相关子查询可能是最简单的解决方案。在每个booking_date之后执行“下一个日期”,然后计算差异(以天为单位)。如果该期间等于或超过比较期间,则返回yes。可选择返回最大可用时间段。

SQL Fiddle

查询1

select
    case when max(avail) >= 3 then 'Yes' else 'No' end is_avail
  , max(avail) max_period
from (
      select 
        datediff(
                 (select booked_date from booked_dates n
                  where n.booked_date > b.booked_date
                  order by n.booked_date
                  limit 1)
               ,  booked_date
                ) avail
      from booked_dates b
      where b.booked_date between '2017-11-02' and '2017-11-26'  
    ) a

<强> Results

| is_avail | max_period |
|----------|------------|
|      Yes |         10 |

答案 1 :(得分:0)

你怎么知道哪一天是自由的一天

SELECT IF(count(a.dates)>=3,'Yes','No')availability 
FROM booked_dates a 
left join (
     SELECT w.dates 
     FROM booked_dates w where w.dates between  '2017-11-07' and '2017-11-17'
    ) free on free.dates = a.dates 
where a.dates between  '2017-11-02' and '2017-11-26'  
and free.dates is not null