gpt4 book ai didi

php - MySQL/PHP - 查找可用的时间段

转载 作者:可可西里 更新时间:2023-11-01 07:23:08 24 4
gpt4 key购买 nike

有几个关于类似主题的问题,但我找不到解决这个特定问题的方法,非常感谢您的意见。

我正在开发一个预订引擎,用户可以在其中在线预订某些服务。我坚持在特定的一天(或一周)内查找和显示可用的时间段。我知道所需时间段的长度(例如 1 小时)和可预订时间段的营业时间(例如 09:00h - 18:00h)。此外,我还有一个 MySQL 表,用于存储已经存在的约会。与我的问题相关的列如下所示:

id  start (datetime)        end (datetime)
1 '2012-11-16 13:00:00' '2012-11-16 14:30:00'
2 '2012-11-16 15:00:00' '2012-11-16 16:00:00'
3 '2012-11-17 12:00:00' '2012-11-16 15:45:00'
4 '2012-11-17 13:00:00' '2012-11-16 16:15:00'
...

鉴于上述信息,我无法找到一个好的解决方案(在 MySQL 或 PHP 中)来检索可用时间段列表。还有一个条件:时隙只能按季度开始。 IE。对于上面的示例数据,16 日可用的一小时时间段为:
09:00, 09:15, 09:30, 09:45, 10:00, ..., 12:00, 16:00, 16:15, ..., 17:00.

请注意,即使可能存在重叠时间(如示例数据),可用时间段也不能重叠。

您认为解决这个问题的最佳方法是什么?

最佳答案

SELECT a.end AS free_after
FROM bookings a
WHERE NOT EXISTS (
SELECT 1
FROM bookings b
WHERE b.start BETWEEN a.end AND a.end + INTERVAL your_duration HOURS
)
AND a.end BETWEEN start_of_search_window AND end_of_search_window;

您只需为 your_duration(整数)、start_of_search_window(日期时间)和 end_of_search_window(日期时间)提供值。

如果你想要花里胡哨的东西......

SELECT free_from, free_until
FROM (
SELECT a.end AS free_from,
(SELECT MIN(c.start)
FROM bookings c
WHERE c.start > a.end) as free_until
FROM bookings a
WHERE NOT EXISTS (
SELECT 1
FROM bookings b
WHERE b.start BETWEEN a.end AND a.end + INTERVAL your_duration HOUR
)
AND a.end BETWEEN start_of_search_window AND end_of_search_window
)
ORDER BY free_until-free_from
LIMIT 0,3;

将为您提供窗口内三个最短的可用插槽(即最接近目标大小)。

关于php - MySQL/PHP - 查找可用的时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13414795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com