gpt4 book ai didi

mysql - 获取给定时期 MySQL 查询的可用马厩

转载 作者:行者123 更新时间:2023-11-29 07:01:20 26 4
gpt4 key购买 nike

这是SQL fiddle

正确答案应该是864871

这些应该是正确的答案,因为如果有人在某个日期退房,则与酒店相同,这意味着当天有房间可用。

下面是数据库字段

stable_registrations
| id | user | stableId | checkInDate | checkOutDate |

stables
| id | name |

其中checkinDate采用YYYY-MM-DD格式。

预期输出为

Available Stables
864
871

我这么说是因为它的工作方式与酒店预订相同,其中 checkInDate 表示客户将在当天抵达,并且可以在中午 12:00 之后入住,但 checkOutDate表示客户当天上午 11:00 或之前离开。

因此,如果 checkOutDate2017-05-01,则意味着稳定版本将于 2017-05-01 12 起提供:下午 00 点。

如果我错误地保存数据,请告诉我存储 checkInDatecheckOutDate 的正确方法。

如果它有助于获得正确的结果,我愿意接受更改数据库模型和/或使用 unixtime 的建议。

最佳答案

以下搜索搜索日期/时间与预订日期/时间之间的重叠。只要开始日期的时间是上午 10 点,结束日期的时间是下午 2 点,它就有效(IOW,同一日期的时间不会重叠)。它还需要保留日期为 SQL 类型 TIMESTAMP。

SET @checkInDate =  '2017-04-29 14:00:00';
SET @checkOutDate = '2017-05-01 14:00:00';

SELECT a.*,
IF(b.`stableid` IS NULL,"Avalalable","Not Available") as `status`,
@checkInDate as `avail_start_range`,
@checkOutDate as `avail_end_range`
FROM `stables` a
LEFT JOIN `event_detail_stable_registrations` b
ON a.`id` = b.`stableid` AND
(((`checkInDate` BETWEEN @checkInDate AND @checkOutDate)
OR (`checkOutDate` BETWEEN @checkInDate AND @checkOutDate))
OR ((@checkInDate BETWEEN `checkInDate` AND `checkOutDate`)
OR (@checkOutDate BETWEEN `checkInDate` AND `checkOutDate`))
)
WHERE b.`stableid` IS NULL
ORDER BY a.`name`;

关于mysql - 获取给定时期 MySQL 查询的可用马厩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43360037/

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