我在使用必须构建的预订系统 (PHP/Mysql) 验证日期时遇到问题。 我之前发过类似的问题Reservation system dates但有些事情发生了变化。
我遇到的问题; 我们在办公室设有工作室/ session 室。这是限时出租的。用户选择他想租房间的日期、时间和小时数。
预订步骤:
1- 用户选择他想租用工作室的月份。 2- 用户选择他想租工作室的日期。 (我在这里卡住了) 3- 用户选择他希望获得 key 的时间。
可接收 key 的时间:
00:00:00 - 06:00:00
06:00:00 - 12:00:00
12:00:00 - 18:00:00
18:00:00 - 24:00:00
这些时间是用户将收到门 key 的时间。
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)
我已经连续玩了 2 天了,但仍然无法破解。我想解决方案很简单,但我可能在错误的方向上搜索。
提前致谢。
编辑示例查询:
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 一天的 block 。
我执行了 4 次此查询,因为当天有 4 个区 block 用户可以领取 key 。
最佳答案
您似乎需要检查一个时间间隔(一对开始日期和结束日期)是否与数据库中的现有时间间隔冲突。如果这是您想要的,那么这里是查询:
-- //// 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 代码传入的数据替换它们。
注意:比较运算符<
和 <=
可能需要根据您的开始/结束日期时间是包含还是不包含进行更改。
关于php - 一天租一个街区的预订系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10329775/