gpt4 book ai didi

php - MySQL 找到第一个可用的周末

转载 作者:行者123 更新时间:2023-11-29 02:35:31 25 4
gpt4 key购买 nike

我有一张 table ,上面有餐厅预订单。它只有一个 restaurant_id 和一个指定实际日期的日期列(我们说的是全天预订)。

我想知道特定餐厅下一个有空的周末是什么时候。 “周末”是周六或周日。如果其中一个可用,那么我们就有一个可用的周末。

查询当然应该考虑当前时间来计算下一个周末。

有人能帮忙吗?

这是“日期”表的表结构和数据,它包含到目前为止所做的所有预订:

id    id_venue    date  
12 1 2011-04-22
13 1 2011-04-23
14 1 2011-04-24
15 1 2011-04-30
16 1 2011-05-07
17 1 2011-05-08

如您所见,5 月 23 日至 24 日的周末已满,因此 5 月 7 日至 8 日的周末已满。我需要找到的是 2001-05-01 的日期,这是今天日期之后的第一个可用的星期六或星期日。

最佳答案

我认为其他人遗漏了这个问题......他们认为你的 table 可能已经被填满了所有周末和一些关于开放与否的状态......我的猜测是你的 table 只有在保留时才有记录...因此您需要查找根本不存在的记录...基于一些自动查找日期...

这是对我完成的另一篇文章的修改here

虽然我没有更改查询的上下文,但我只放入了与您的表关联的列。我知道你只反对一张 field 表,我也是(实际上)。然而,为了理解“JustDates”别名,这个 INNER PRE-QUERY 正在通过对任何其他表进行笛卡尔连接来创建一个动态填充的所有日期表。在这种情况下,您的“Venue”预订表(我没有'看不到您的实际表名引用,因此您必须更改它)。因此,这实际上创建了一个包含所有日期的表格,从“今天”开始,并向前推进 30 天(通过限制),但可以是 40、50、300 或您需要的任意数量。提供“YourVenueTable”至少有与您要测试的天数一样多的记录。 (帖子中的相同说明来自)。此结果集将在 30、40 或任何几天后仅针对给定的一周中的第 1 天或 7 天星期六进行预过滤...因此它应该仅返回 4 月 23 日、4 月 24 日、4 月的结果集30、5月1日、5月7日、5月8日、5月14日、5月15日、5月21日、5月28日等

所以现在您有一个动态创建的结果集,其中包含您考虑前进的所有可能日期。现在,它被加入到您实际的 field 预订表中,并被过滤以仅返回那些没有找到您关注的 id_venue 的日期。在您的数据示例中,它会在 4 月 23 日和 24 日找到匹配项,并且不会返回这些记录。与 4 月 30 日相同...但是,它会发现预选列表中包含 5 月 1 日的记录不会在 field 表中找到匹配的日期,因此会按照您的预期包含它...然后它将继续跳过5 月 7 日和 8 日,然后返回 5 月 14 日、15 日、21 日、28 日等...

select JustDates.OpenDate
from
( select
@r:= date_add( @r, interval 1 day ) OpenDate
from
( select @r := current_date() ) vars,
Venue
LIMIT 30 ) JustDates
where
DAYOFWEEK( JustDates.OpenDate ) IN ( 1, 7 )
AND JustDates.OpenDate NOT IN
( select Venue.date
from Venue
where Venue.id_venue = IDYouAreInterestedIn
and Venue.Date = JustDates.OpenDate )
order by
JustDates.OpenDate

请注意,根据其他预订发布,对限制为 30 以上的预订日期可用日期的查询可以是系统中的任何表,只要它至少有您想要期待的天数预订...如果您想要来年的所有可用性,您可能希望表中的 365 条记录用于笛卡尔结果,以便通过动态创建的“日期”记录获取 @r 循环。

关于php - MySQL 找到第一个可用的周末,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677725/

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