- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用导游预订系统。在有人提示这个问题与此问题重复之前:Help with SQL query to find next available date for a reservation system我想指出的是,我不想使用日历表。
一些基本信息:
Reservation table structur:
CREATE TABLE IF NOT EXISTS `reservations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`guider_id` int(11) NOT NULL,
`date` datetime NOT NULL,
`duration` int(11) NOT NULL,
PRIMARY KEY (`id`),
) ;userStartDateTime = the start date and time the user choose in the reservation system userEndDateTime = the start date and time the user choose in the reservation system + the duration
Minimum duration for a tour is 15 minutes.
交易如下:顾客来到预订系统。他们选择日期和时间、持续时间和范围,以防所选日期/时间不再可用。
我们有不同的导游,但总是相同的旅行,只是他们所花费的时间和参观的地方不同(目前这并不重要)。因此,保留意见可能会超出一定程度。每位导游全天候 24/7 全天候提供服务。但每次游览后有5分钟的缓冲时间,以避免延误。
我通过将游览的持续时间添加到开始时间来生成结束日期。我在预订表中搜索所有带有 BETWEEN where 子句的指南,如下所示:
SELECT guider_id FROM reservations as r
WHERE
(((r.startDateTime - interval 5 minute) BETWEEN userStartDateTime AND userEndDateTime)) OR
((r.startDateTime + interval r.duration minute + interval 5 minute) BETWEEN userStartDateTime AND userEndDateTime))
之后,我在指南表上使用“NOT IN”来查找可用的指南(就像前面提到的,每个指南在一天中的每个时间都可用)。如果我找到一个:是的,预订成功。如果没有......我需要找到一个可用的日期/时间。
这就是我被困住的地方。我不想创建一个存储每个可用日期时间组合的表,因为这会浪费大量内存,并且意味着大量工作和性能。因为一天中的每个时间都可以选择。这意味着,每次预订时我都需要重新安排当天的整张 table 。该表已包含一天 1440 个条目,一年(假设 360 天)518400 个条目。要在未来十年填充该表......您可以自己计算。这甚至不值得考虑。
所以我现在需要做的是:我需要在 userStartDateTime 范围内找到一个新的日期/时间。首先向前(首选),如果没有找到自由引导者,则从那向后。
那么我该怎么做呢?
我对此没有什么可行的想法。仅仅将范围添加到我计算的结束日期中是行不通的,因为它会吸引很多在其中开始和结束旅行的导游。
问候函数0der
最佳答案
创建一个名为 ScheduledTour 的新表怎么样(仅作为示例)。然后,每当您需要添加新的导游或删除导游时,只需更新表格即可。因此,本质上,当第一次创建表格时,它会完全是空的。
scheduledTour 表包含以下信息:tour_id、guider_id、customer_id、startDateTime、endDateTime。
tour_id 只是一个自动递增的 INT 值,您可以使用它来保持条目的唯一性。 Guider_id 是您在问题中提到的那个,它将引用您已有的表中分配的指南,并且与 customer_id 相同(如果您有客户表。如果没有,您可以替换为票号、姓名等.).
这样,安排的游览数量就没有限制,并且您可以轻松创建添加/删除页面。您可以提取特定导游的游览、所有游览或带有特定开始和结束日期/时间的游览。
此外,如果所有游览都有 5 分钟时间。缓冲区,然后在创建游览时将其添加到开始和结束时间。
例如,在您输入的日期之后的“UPDATE”语句中:
... DATE_ADD([startDateTime], INTERVAL 5 MINUTE) ...
希望这有帮助!
关于php - 在没有日历表的情况下搜索给定范围内的可用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9120648/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我正在尝试实现 this solution . 我有联系人和日历表。联系人有 created_at 时间戳列,日历有 date 列,这是日期。 所以查询: select contacts.id, ca
我正在制作日历,但是,由于我使用的是 8 colspan,所以我无法为所有 tr 获得正确的宽度,这是我到目前为止所做的,
我是一名优秀的程序员,十分优秀!