0

"Open Till at least"我正在尝试通过过滤器搜索场地。

我遇到的问题是,有些场馆在 to 的几个小时内营业,而有些场馆的8AM营业时间6PM10PMto 3AM。一位 Nice SO 成员帮助我创建了此代码,但是当我尝试修改它以进行搜索时,我注意到了一个问题。

如果我查询一个开放till at least 20:00的场地,并且场地开放时间是从11AM21:00,那么一切正常

但是如果我查询一个开放时间的场地till at least 20:00并且营业时间是 from 21:00to 03:00,则closed返回。

如何显示仍然关闭的场馆的营业时间?

这是我的代码:

SELECT
e.VENUE_NAME,
hrs.opening_day,
hrs.opening_time,
hrs.closing_time
FROM hours_of_operation hrs join venues e
  on hrs.venue_id = e.id
     and not is_closed
     and ((hrs.opening_day=date_format('$phpWhenDate' - INTERVAL (closing_time<opening_time and time('$phpWhenDate')<closing_time) DAY, '%a'))
          AND (closing_time<opening_time XOR
         (time('$phpWhenDate') >= least(opening_time,closing_time)
          and time('$phpWhenDate') < greatest(opening_time, closing_time))))

dataWhenDate看起来像这样:2013-02-21 04:00:00

基本上,我使用滑块来选择我希望场地至少开放多长时间,并生成要发送的日期。

感谢大家!

4

1 回答 1

1

21:00严格来说,在和之间开放的场所,03:00在查询开放时间时应该返回为关闭till at least 20:00,因为它仅在 21:00 开放。如果我是用户,它实际上会误导我,如果opening hours till at least 20:00会显示一个仅在21:00.

如果您只是想显示哪些场所在之后开放,20:00那么只需20:00与场所的开放时间和关闭时间进行比较,如果其中任何一个大于20:00之后开放的时间20:00(但您可能需要添加星号向用户解释过去开放20:00包括在 ) 之后开放的场馆20:00

于 2013-02-20T21:26:03.527 回答