我无法使用我必须构建的预订系统来验证日期(PHP / Mysql)。 我之前发布了一个类似的问题Reservation system dates但事情发生了变化。
我遇到的问题; 我们在办公室有一个工作室/会议室。这是在有限的时间范围内出租。用户选择他希望租用房间的日期,时间和小时数。
一步一步预订:
1-用户选择他想租用工作室的月份。 2-用户选择他想租用工作室的那一天。 (这里我卡住了) 3-用户选择他希望获得密钥的时间。
密钥可接收的时间:
00:00:00 - 06:00:00
06:00:00 - 12:00:00
12:00:00 - 18:00:00
18:00:00 - 24:00:00
这些时间是用户将收到门钥匙的时间。
4-用户选择他希望租用工作室的小时数。
问题: 我可以查看工作室租用的日期,但不确定时间。 我知道如何在PHP中检查时间。但是例如;
用户1于2012年4月27日从12:00:00至18小时租用工作室。 用户2希望在2012年4月26日18:00:00至12小时之前租用工作室。 用户3希望在4月28日租用该工作室。
我怎样才能检查用户2是否可以在工作室之前租用工作室,直到截至4月27日12:00:00。 如何检查用户3是否可以在28日租用工作室并确保它在06:00之后可用。
数据库:
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)
我已经连续两天在这里,但仍然无法破解它。我想解决方案很简单,但我可能会朝错误的方向搜索。
提前致谢。
编辑示例查询:
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:00 - 06:00:00 时段的时间戳。
我执行此查询4次,因为当天有4个块可供用户取钥。
答案 0 :(得分:1)
好像你需要检查一个间隔 - 一对开始和结束日期 - 是否与数据库中的现有间隔冲突。如果这是你想要的,那么这里是查询:
-- //// 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代码传入的数据替换它们。
注意:可能需要更改比较运算符<
和<=
,具体取决于您的开始/结束日期时间是包含还是排他。