0

我有一个 Mysql 表,其中包含已预订的日期(对于某些假日属性)。

例子...

表“listing_availability”

行...

availability_date(这显示日期格式 2013-04-20 等)

availability_bookable (可以是/否。“是” = 预订转换日,它是“可用”。“否”表示该酒店已在这些日期预订)

一年中的所有其他日期(“否”除外)都可以预订。这些日期不在数据库中,只有预订的日期。

我的问题是......我必须制作一个首先调用 Get Date 函数的 SQL 语句(不确定这是否是正确的术语)

然后从 "availability_date" WHERE "availability_bookable" = "No" 中删除日期

这将为我提供可用于预订的日期、年份和属性。

任何人都可以帮忙吗?

问候米

4

2 回答 2

1

好像您几乎已经编写了查询。

SELECT availability_date FROM listing_availability
WHERE availability_bookable <> 'NO'
AND availability_date >= CURDATE()
AND YEAR(CURDATE()) = YEAR(availability_date)
于 2013-03-18T13:40:38.080 回答
0

我想我明白了,你显然会确认。您的“availability_booking”中有一些记录,但不是一年中的每一天,只有那些可能有一些东西,而不是全部都承诺的,有些可能有,有些没有。

因此,您想模拟给定日期范围内的所有日期...假设 4 月 1 日至 7 月 1 日,因为有人希望在该时间段内预订派对。您不能说 4 月 27 日是开放的并且可用的,而不是预先填写您的生产表……因为不存在这样的记录。

要模拟日期范围的日历,您可以使用 MySQL 变量并加入数据库中的“任何”表,前提是它有足够的记录来模拟您想要的日期范围......

select
      @myDate := DATE_ADD( @myDate, INTERVAL 1 DAY ) as DatesForAvailabilityCheck
   from
      ( select @myDate := '2013-03-31' ) as SQLVars,
      AnyTableThatHasEnoughRows
   limit
      120;

这只会为您提供从 2013 年 4 月 1 日开始的日期列表(原始 @myDate 是开始日期前 1 天,因为字段选择会增加 1 天以到达 4 月 1 日,然后继续...限制120 天(或任何您正在寻找的基于范围的 - 30 天、60、90、22 等等)。“AnyTableThatHasEnoughRows”实际上可能是您的“availability_booking”表,但我们只是将它用作带有行的表,没有 join 或 where 条件,仅够获得... 120 条记录。

现在,我们可以使用它来加入您想要的任何表并应用您的条件。您刚刚创建了一个完整的日历来进行比较。您的最终查询可能会有所不同,但这应该可以为您解决大部分问题。

select 
      JustDates.DatesForAvailabilityCheck,
   from
      ( select
              @myDate := DATE_ADD( @myDate, INTERVAL 1 DAY ) as DatesForAvailabilityCheck
           from
              ( select @myDate := '2013-03-31' ) as SQLVars,
              listing_availability
           limit
              120 ) JustDates
         LEFT JOIN availability_bookable 
            on JustDates.DatesForAvailabilityCheck = availability_bookable.availability_date
   where
         availability_bookable.availability_date IS NULL
      OR availability_bookable.availability_bookable = "Yes"

所以上面使用示例日历并查看可用性。如果不存在这样的匹配日期(通过 IS NULL),那么您想要它意味着没有冲突。但是,如果表中有记录,您只需要那些为“是”的记录,您可以预订它,文件中的条目可能不会被提交,并且可以在可用日期的结果查询中。

于 2013-03-18T13:56:32.603 回答