首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要存储多个日期范围值并通过sql检索它们

需要存储多个日期范围值并通过sql检索它们
EN

Stack Overflow用户
提问于 2011-01-27 21:45:56
回答 4查看 1.9K关注 0票数 3

我在建一个房屋租赁系统。该系统存储房屋的配置文件,用户可以预订房屋,租期从一天到一年不等。我已经有了所有的预订部分设置,除非我面临着客户的要求,能够将某些日期和日期范围设置为不可预订的家庭。

一所房子可以租一整年,也可以租6个月,或者在特殊的日子里不能租,例如:假日和周末的夏季房屋等。

我很困惑,因为考虑到信息必须可以通过sql查询检索,我如何才能设置一个数据库表来存储这些信息。我的意思是,考虑以下情况,除了星期三、7月4日、11月10日至12月25日和12月31日外,一所房屋全年都可以出租。

如何将其存储在数据库中,并能够运行查询以检查设置日期之间的房屋可用性。我在php MySql中唤醒

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-27 21:53:37

您正在描述两个不同的概念:“在星期三”与其说是一个日期范围,不如说它是一个循环模式。“周末”也是如此。

除了定义这些不可用日期的属性表之外,您可能还在查看两个不同的表:一个表示特定的日期范围,另一个表示重复模式。

代码语言:javascript
复制
                         Property
                            |
              -------------- ---------------
             |                              |
PropertyUnavailableRecurrence PropertyUnavailableRange 

(请记住,您可能想要找出较短的名称)

PropertyUnavailableRecurrence需要存储将“星期三”和“周末”转变为可行的决策逻辑所需的信息。我不能为你们建模,因为你们在这个模式中展示的都是一周中特定的几天,但我想你们需要能够考虑“每月的第一个星期三”或“每月的第二个星期三”,但我不知道。在任何情况下,这都是您需要存储信息的地方。

PropertyUnavailableRange将只包含定义范围的简单FromTo日期。这一部分非常简单。

当然,另一种方法是采用应用程序中指定的重复模式,并将它们转换为谨慎的PropertyUnavailableRange记录,但您仍然需要设置一个表来存储这些重复记录,并将这些重复记录与重复记录相关联,以便您可以对其进行管理。

票数 3
EN

Stack Overflow用户

发布于 2011-01-27 22:54:30

一种方法是使用具有以下结构的表PropertyUnavailable:

代码语言:javascript
复制
create table PropertyUnavailable
(
  property_id number not null,
  when        date not null
);

对于由于停电期间(例如,每个星期三、假日等)而不可用的每一天,该表将具有一行。我忽略了您将如何存储模式的元信息--此表所需的只是由于封锁期而属性不可用的每一天的行。

我假设您还会有一个用于预约天数的表PropertyReserved,其结构与上面相同,外键为reservation_id (或类似的外键)。

现在,要查看给定日期范围内哪些日期不可用/保留,sql将如下所示:

代码语言:javascript
复制
SELECT a.when, 'blackout'
FROM PropertyUnavailable a
WHERE a.when between <from_date> to <to_date>
UNION ALL (
SELECT b.when, 'reserved'
FROM PropertyReserved b
WHERE b.when between <from_date> to <to_date>
);

如果查询没有返回任何内容,则该属性在指定的日期范围(from_date、to_date)之间可用。

票数 1
EN

Stack Overflow用户

发布于 2011-01-28 03:34:12

你有没有考虑过简单地以系统的名义预订那些“无法预订”的日期?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4817095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档