gpt4 book ai didi

mysql - 查询以避免不同时段的冲突

转载 作者:行者123 更新时间:2023-11-29 06:08:16 25 4
gpt4 key购买 nike

我在几个地方寻找过这个问题,但不一定找到正确的答案。

我正在尝试查询给定时间范围内的可用提供商。我有一列包含所有带有 date_start 和 date_end 的旧预订。基本上,如果我想预订,我需要确保我的提供商有空。到目前为止,查询的工作原理如下:

  SELECT a.provider a
FROM l_provider_zip a
(several inner Joins and conditions)
WHERE a.zip = :zip

AND a.provider_id
NOT IN (
SELECT da.provider_id
FROM booking da
WHERE da.provider_id IS NOT NULL
AND (
( :start BETWEEN da.date_start AND da.date_end)
OR ( :end BETWEEN da.date_start AND da.date_end)
OR ( da.date_start BETWEEN :start AND :end )
)
)

我担心的是,为了查找是否有可用于新预订的提供商,我需要确保新预订不会与其他预订发生冲突。这里我有3个条件语句来弄清楚。

  1. :(新预订的开始时间)在 da.date_start 和 da.date_end 之间
  2. :(新预订的)结束时间在 da.date_start 和 da.date_end 之间
  3. da.date_start BETWEEN :start AND :end (另一预订不在新预订的开始或结束位置)

这看起来效率很低,但我找不到更好的方法。当然,我可以通过索引来提高效率,但是有没有更好的方法来执行此操作。这是我的项目的一个相当核心的问题,我认为这可能是许多人已经面临并将继续面临的问题。再次感谢!

最佳答案

如果我理解了您的问题,那么您正在寻找可用于此预订的提供商,即那些没有与此预订冲突的预订的提供商)。因此,要查找与此预订冲突的所有预订,您需要查找预订

- where the booking start date is on or before the new booking end date, and
- where the booking end date is on or after the new booking start date

因此,对于您的子查询,将转换为

 SELECT da.provider_id
FROM booking da
WHERE da.provider_id IS NOT NULL
AND da.date_start <= :end
AND da.date_end >= :start

关于mysql - 查询以避免不同时段的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10417918/

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