首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预订系统租用一天一段时间

预订系统租用一天一段时间
EN

Stack Overflow用户
提问于 2012-04-26 08:30:29
回答 1查看 1.4K关注 0票数 3

我很难用我必须构建的预订系统(PHP/Mysql)来验证几天。在Reservation system dates之前,我发布了一个类似的问题,但有些地方发生了变化。

我遇到的问题是:我们办公室有一间工作室/会议室。这是一个有限的时间范围内的租金。用户选择在哪一天,时间和多少小时,他想租这个房间。

一步一步的预订:

用户选择租用工作室的月份。用户选择租用工作室的日期。(在这里我被卡住了) 3-用户选择他希望获得密钥的时间。

可接收密钥的时间:

代码语言:javascript
复制
00:00:00 - 06:00:00
06:00:00 - 12:00:00
12:00:00 - 18:00:00
18:00:00 - 24:00:00

在这些时候,用户将收到门的钥匙。

用户选择他想租工作室的小时数。

的问题:,我可以检查一下这个工作室是什么时候租的,但不是什么时候。我知道如何在PHP中检查时间。但是,例如;

用户1于2012年4月27日12:00至18小时租用工作室。用户2想在2012年4月26日从6:00:00到12小时后租用工作室。用户3想在4月28日租用这个工作室。

我怎样才能检查用户2是否可以租用工作室,直到4月27日中午12:00。如何能够检查用户3是否可以在28日租用工作室,并确保它在06:00之后可用。

数据库:

代码语言:javascript
复制
id                 int(11)
user_id             int(11)
rental_name         varchar(255)
key_receive_time varchar(255)
start_date         int(11)
end_date         int(11)
total_hours      int(11)

我已经连续干了两天了,但还是没办法解决。我认为解决方案很简单,但我可能找错了方向。

提前谢谢。

编辑示例查询:

代码语言:javascript
复制
SELECT * FROM reservations
WHERE (start_date >= " . $start_block_1 . " AND end_date <= " . $end_block_1   . ")
OR    (start_date >= " . $end_block_1   . " AND end_date <= " . $start_block_1 . ")

$start_block_1$end_block_1表示一天中的时间戳00:00- 06:00:00块。

我执行这个查询4次,因为在一天中有4个块,用户可以拿起键。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-26 08:59:44

似乎您需要检查一个间隔--一对开始日期和结束日期--是否与数据库中的现有间隔发生冲突。如果这是您想要的,那么下面是查询:

代码语言:javascript
复制
-- //// FOR TESTING \\\\
CREATE TABLE reservations (start_date INT, end_date INT);

INSERT INTO reservations(
    start_date,
    end_date
)
VALUES (
    UNIX_TIMESTAMP('2012-04-27 12:00:00'), -- start date booked by user 1
    UNIX_TIMESTAMP('2012-04-28 06:00:00')  -- end date booked by user 1
);

SET @d1 = UNIX_TIMESTAMP('2012-04-26 18:00:00'); -- start date requested by user 2
SET @d2 = UNIX_TIMESTAMP('2012-04-27 06:00:00'); -- end date requested by user 2
-- \\\\ FOR TESTING ////

SELECT 1
FROM reservations
WHERE
(@d1        <= start_date AND start_date <  @d2     ) OR -- start datetime lies "inside" the interval
(@d1        <  end_date   AND end_date   <= @d2     ) OR -- end datetime lies "inside" the interval
(start_date <= @d1        AND @d2        <= end_date)    -- the interval itself lies inside start and end datetime

查询将返回与给定间隔冲突的行。变量@d1@d2用于在mysql中测试查询;将它们替换为从PHP传入的数据。

注意:比较操作符<<=可能需要更改,这取决于您的开始/结束日期时间是包含还是独占的。

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

https://stackoverflow.com/questions/10329775

复制
相关文章

相似问题

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